Mitä tarkoitaa ilmoitus vb6:ssa
Run-time error 521:
Can't open Clipboard
Ilmoitus tulee välillä kun koittaa liitää leikepöydältä tietoa textbox:iin.
Ohjelma kopioi toisesta ohjelmasta maalatun tekstin Keybd_event:llä näppäin painalluksilla(Ctrl+c)ja sitten kun sitä ylittää liittää (text1.text=Clipboard.getText) ajettavan ohjelman textbox:iin niin tulee tuo ilmoitus.
Ennen tuota leikepöydälle kopiointia leikepöytä on tyhjennetty(Clipboard.Clear)
Heippa Milu!
testaa toimivuus oheisella koodilla...
Private Sub Command1_Click() Text1.Text = "" Clipboard.SetText (Text1.Text) Shell "notepad.exe", vbNormalFocus SendKeys "jotain tekstiä...^a^c", True AppActivate "Nimetön - Muistio" SendKeys "%{F4}" + "{TAB} " Text1.Text = Clipboard.GetText End Sub
mikäli tökkii yhä tsekkaa jutskat seuraavasti:
Käynnistä -> Suorita - "sfc /scannow" - klikkaa OK
Tolla koodilla se vaan vilahtaa, kun kirjoittaa muistioon, mutta ei kirjoita text1.text:boxiin.
Nyt ei saa sit nauraa!!!
Eli tossa mun koodin on varmaan jotain muuta vikaa, kun sen pitäis klikata hiiren osoittimella toisesta ohjelmasta x ja y:llä määrättyä kohta(jolloin teksti tulee siniseksi) ja sit kopioida se leikepöydälle ja sit liittää se leikepöydältä omaan ohjelmaan text1.text boxsiin.
Se juttu on timerin alla ja tekee sitä muutaman kerran sekunnissa, toimii satunaisesti jonkun aikaa ja sit antaa ton virheilmoituksen.
En vaan keksinyt muuta keinoa homman toteutukseen kun ei tosta ohjelmoinnista hirveesti ole kokemusta.
Call SetCursorPos(x, y) Call mouse_event(MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0&) Call mouse_event(MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0&) Clipboard.Clear keybd_event VK_CONTROL, 0, 0, 0 keybd_event VK_C, 0, 0, 0 keybd_event VK_C, 0, KEYEVENTF_KEYUP, 0 keybd_event VK_CONTROL, 0, KEYEVENTF_KEYUP, 0 DoEvents Text1.text = Clipboard.GetText
Edit:
Vai onko jotain muuta helppoa keinoa saada toisesta ohjelmasta "maalattuna" olevaa tekstitietoa kopioitua oman ohjelman muuttujaan, toi purkkaviritelmä toimii kun siihen laittaa on error virheen ohittavan toiminnon, mutta se ei aina kopio/liitä sitä tekstiä vaan jättää joskus tekemättä sen, vaikka se toisessa ohjelmassa näyttää olevan ns."maalattuna" tolla klikkaus systeemillä.
Tekeekö se liian nopeeta sitä vai mikä aiheuttaa ton virheilmoituksen.
Heippa taas Milu!
virhe aiheutuu juuri siitä, että hommaa yritetään hoitaa aina välillä liian nopeasti eli Clipboard olioon yritetään viedä ja samanaikaisesti tuoda sieltä dataa...kokeile jarruttaa hieman...
'... If Clipboard.GetData <> 0 Then Clipboard.Clear '...koodisi jonka avulla kopioit tekstiä '...toisesta ohjelmasta leikepöydälle Dim TimerTag As Single TimerTag = Timer + 0.25 jumpBack: On Error Resume Next Text1.Text = Clipboard.GetText If Err > 0 Then Err.Clear If TimerTag > Timer Then Goto jumpBack End If On Error Goto 0 '....
Ok
Sain toimii kohtalaisen hyvin kun laittelin jarruja sinne väliin, täytyy vielä oikein ajankanssa perehtyä tuohon, että mitkä on sopivat pienet jarruajat.
Mut olis vielä sellainen kysymys, että onko mahdollisuutta saada sen leikepöydälle kopioidun tekstin väriä millään selville ennen sen liittämistä siihen text1.text boxsiin
Heippa taas Milu!
kyllä onnistuu toi värijutska kunhan vääntää...
hae täältä mallia
sit oikeastaan voisit lisätä tutkinta-aikaa (TimerTag) viritelmähän päästää läpi heti jos tekstiä löytyy ja 0.25 sekunnin jälkeen oli leikepöydällä tekstiä tai ei...
kiitti Nea
Tarkennappas tota mulle "(TimerTag) viritelmähän päästää läpi heti jos tekstiä löytyy" nyt ei ihan saa ajatuksesta kiinni.
"On Error Resume Next" jatkaako tuo ohjelman suoritusta virheen jälkeiseltä riviltä vai miten toi tarkalleen toimii.
Milu kirjoitti:
"On Error Resume Next" jatkaako tuo ohjelman suoritusta virheen jälkeiseltä riviltä vai miten toi tarkalleen toimii.
Jep.
Aihe on jo aika vanha, joten et voi enää vastata siihen.