Get selected Text from other Application
- Michael Vogel
- Addict
- Posts: 2797
- Joined: Thu Feb 09, 2006 11:27 pm
- Contact:
Get selected Text from other Application
Hi,
I'd tried to automate the following actions:
1) copying text from the browser
2) searching the text in a dictionary
3) displaying the result in a popup window (keeping the focus at the browser)
I solved 2&3 easily, but the simple action to get a marked text into the clipboard does not work! I found some questions like this already in the forum, but was not able to find the right trick how to do it...
I tried to send different messages (e.g. SendMessage(GetTopWindow() or GetFocus() or GetActiveWindow(),#WM_CHAR,3,0) for sending Ctrl-C) to get the text into the clipboard, but everything failed for now.
Can anyone help?
Thanks,
Michael
I'd tried to automate the following actions:
1) copying text from the browser
2) searching the text in a dictionary
3) displaying the result in a popup window (keeping the focus at the browser)
I solved 2&3 easily, but the simple action to get a marked text into the clipboard does not work! I found some questions like this already in the forum, but was not able to find the right trick how to do it...
I tried to send different messages (e.g. SendMessage(GetTopWindow() or GetFocus() or GetActiveWindow(),#WM_CHAR,3,0) for sending Ctrl-C) to get the text into the clipboard, but everything failed for now.
Can anyone help?
Thanks,
Michael
- Michael Vogel
- Addict
- Posts: 2797
- Joined: Thu Feb 09, 2006 11:27 pm
- Contact:
- Michael Vogel
- Addict
- Posts: 2797
- Joined: Thu Feb 09, 2006 11:27 pm
- Contact:
Yep,
seems to get complicated!
Using applications like the notepad are working, but I'll try to get (automatically) the selected text from my browser window - which does not work for now...
And my code should work in "each" application, so some user will use firefox, internet explorer, opera, maxthon,...
seems to get complicated!
Using applications like the notepad are working, but I'll try to get (automatically) the selected text from my browser window - which does not work for now...
And my code should work in "each" application, so some user will use firefox, internet explorer, opera, maxthon,...
Code: Select all
CompilerIf 0
#Message=#WM_COPY
#wParam=0
#lParam=0
CompilerElse
#Message=#WM_CHAR
#wParam=3
#lParam=$2E0001
CompilerEndIf
#Nil="{}"
Global Handle
Procedure CheckClipboard(variante.s)
Protected a.s
SendMessage_(Handle,#Message,#wParam,GetClipboardText())
WaitWindowEvent(10)
Delay(5)
a=GetClipboardText()
If a<>#Nil
Debug "Bingo - "+variante+"!"
Debug "Clipboard is now '"+a+"'"
End
EndIf
EndProcedure
Procedure Main()
Debug "Start..."
Delay(5000)
SetClipboardText(#Nil)
Repeat
Handle=GetTopWindow_(0)
CheckClipboard("A")
Handle=GetFocus_()
CheckClipboard("B")
Handle=GetForegroundWindow_()
CheckClipboard("D")
Handle=FindWindowEx_(Handle,0,"EDIT",0)
CheckClipboard("E")
ForEver
EndProcedure
Main()
Last edited by Michael Vogel on Wed Nov 15, 2006 8:48 am, edited 1 time in total.
- Michael Vogel
- Addict
- Posts: 2797
- Joined: Thu Feb 09, 2006 11:27 pm
- Contact:
Next try, also not successful
Still try to get the selected text from a browser (via the clipboard or however)...
Thought, that this could be done easily, Autohotkey and other applications are doing that with no problem...
Any hints

Still try to get the selected text from a browser (via the clipboard or however)...
Thought, that this could be done easily, Autohotkey and other applications are doing that with no problem...
Any hints

Code: Select all
Delay(2000)
Procedure EnumProc(hwnd, param)
Shared Resultstr
tmp.s=Space(255)
GetClassName_(hwnd, @tmp, 255)
;resultstr + "Handle: " + Str(hwnd) + " Class: " + Trim(tmp) + #CRLF$
SendMessage_(hwnd,#WM_COPY,0,0)
WaitWindowEvent(10)
a.s=GetClipboardText()
Debug Left(a,3)+" - " + Trim(tmp)
ProcedureReturn 1
EndProcedure
SetClipboardText("{}")
win=GetForegroundWindow_()
Debug win
;win=00080240
If win
EnumChildWindows_(win, @EnumProc(), 0)
;MessageRequester("-",Resultstr)
EndIf
Have you tried whether the example code from freak suits your needs?
http://www.purebasic.fr/german/viewtopi ... 9&start=10
http://www.purebasic.fr/german/viewtopi ... 9&start=10
- Michael Vogel
- Addict
- Posts: 2797
- Joined: Thu Feb 09, 2006 11:27 pm
- Contact:
Now I checked your link, but it seems that I'm not clever enough to get a positive result...Shardik wrote:Have you tried whether the example code from freak suits your needs?
http://www.purebasic.fr/german/viewtopi ... 9&start=10
With the examples I could get the selected text from a Webgadget, but I still fail to get the text from an external browser application (like maxthon, internet explorer etc.)
It would be cool to do that without the clipboard (I also tried to send EM_GETSEL message to all handles I could find) but it's also no problem if the clipboard would have to be used (sending the WM_COPY message, like Trond wrote), but how to get the right handle???
- netmaestro
- PureBasic Bullfrog
- Posts: 8451
- Joined: Wed Jul 06, 2005 5:42 am
- Location: Fort Nelson, BC, Canada
I was able to get 7/8ths of the way through this, and in the course of my research I found this code written by freak, which goes 8/8ths of the way through it. All credit belongs to freak as all I did was update it to v4, and this program will return the selected text from an IE window. You might massage it a bit to choose a specific IE window if desired:
Code: Select all
; By Freak
Procedure ErrorMessage(Value)
Message$ = Space(3000)
FormatMessage_(#FORMAT_MESSAGE_IGNORE_INSERTS|#FORMAT_MESSAGE_FROM_SYSTEM, 0, Value, 0, @Message$, 3000, 0)
MessageRequester("Error","Error:"+Chr(13)+Message$, #MB_ICONERROR)
EndProcedure
Procedure MakeBSTR(String$)
Unicode$ = Space(Len(String$)*2+2)
MultiByteToWideChar_(#CP_ACP, 0, @String$, -1, @Unicode$, Len(String$)*2+2)
ProcedureReturn SysAllocString_(@Unicode$)
EndProcedure
Procedure.s ReadBSTR(bstr)
length = WideCharToMultiByte_(#CP_ACP, 0, bstr, -1, 0, 0, 0, 0)
Text$ = Space(length)
WideCharToMultiByte_(#CP_ACP, 0, bstr, -1, @Text$, length, 0, 0)
ProcedureReturn Text$
EndProcedure
Procedure.l GetIHTMLDocument2(ExplorerServerWindow)
HtmlDoc.IHTMLDocument2 = 0
OleAcc = OpenLibrary(#PB_Any, "OLEACC.DLL")
If OleAcc And GetFunction(OleAcc, "ObjectFromLresult")
Message = RegisterWindowMessage_("WM_HTML_GETOBJECT")
SendMessageTimeout_(ExplorerServerWindow, Message, 0, 0, #SMTO_ABORTIFHUNG, 1000, @MessageResult)
CallFunction(OleAcc, "ObjectFromLresult", MessageResult, ?IID_IHTMLDocument2, 0, @HtmlDoc)
CloseLibrary(OleAcc)
EndIf
ProcedureReturn HtmlDoc
EndProcedure
Procedure EnumChildProc(hwnd, *hServer.LONG)
Class$ = Space(100)
GetClassName_(hwnd, @Class$, 100)
If Class$ = "Internet Explorer_Server"
*hServer\l = hwnd ; server window found.
ProcedureReturn #False
Else
ProcedureReturn #True
EndIf
EndProcedure
DataSection
IID_IHTMLDocument2: ; {332C4425-26CB-11D0-B483-00C04FD90119}
Data.l $332C4425
Data.w $26CB, $11D0
Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19
IID_NULL: ; {00000000-0000-0000-0000-000000000000}
Data.l $00000000
Data.w $0000, $0000
Data.b $00, $00, $00, $00, $00, $00, $00, $00
EndDataSection
; CoInitialize around the whole thing is important as otherwise it won't work.
CoInitialize_(0)
; find the IE server window:
;
hWnd.l = FindWindow_("IEFrame", 0)
EnumChildWindows_(hWnd, @EnumChildProc(), @ServerWindow)
; get the interface:
;
Document.IHTMLDocument2 = GetIHTMLDocument2(ServerWindow)
If Document
If Document\get_selection(@Selection.IHTMLSelectionObject) = #S_OK
; first we should check the type of the selection, because if a control
; is selected, you will get a different object from createRange()!
;
If Selection\get_type(@bstr_string) = #S_OK
Type$ = ReadBSTR(bstr_string)
SysFreeString_(bstr_string)
Else
Type$ = ""
EndIf
Select LCase(Type$)
Case "none"
MessageRequester("", "Nothing is selected.")
Case "text"
; ok, get the IDispatch for the TextRange object
;
If Selection\createRange(@TextRangeDispatch.IDispatch) = #S_OK
; bstr_name = MakeBSTR("htmlText") ; use this to get html code
bstr_name = MakeBSTR("text")
; get the dispid of the property we want to get
;
If TextRangeDispatch\GetIDsOfNames(?IID_NULL, @bstr_name, 1, 0, @dispid.l) = #S_OK
arguments.DISPPARAMS\cArgs = 0
; now read the actual property.
;
result= TextRangeDispatch\Invoke(dispid, ?IID_NULL, 0, #DISPATCH_PROPERTYGET, @arguments, @varResult.VARIANT, 0, 0)
If result = #S_OK And varResult\vt = #VT_BSTR
SelectedText$ = ReadBSTR(varResult\bstrVal)
SysFreeString_(varResult\bstrVal)
MessageRequester("Selected Text:", SelectedText$)
Else
ErrorMessage(result)
EndIf
SysFreeString_(bstr_name)
EndIf
TextRangeDispatch\Release()
EndIf
Case "control"
MessageRequester("", "A control is selected.")
Default
MessageRequester("", "Error!")
EndSelect
Selection\Release()
EndIf
Document\Release()
EndIf
CoUninitialize_()
- Michael Vogel
- Addict
- Posts: 2797
- Joined: Thu Feb 09, 2006 11:27 pm
- Contact:
Thanks to you all,
now I took netmaestros code to get a 3/5 solution
(IE-based browsers work now!)
Maybe someone also can give me the hint, how to activate the WM_COPY in external applications (firefox, opera)
Here is the code where I have included all your hints:
I loads a text file with questions and answers (like seen at the end) and displays the found question (just start the program, load the textfile into the internet browser and select a word from a question)....
now I took netmaestros code to get a 3/5 solution

Maybe someone also can give me the hint, how to activate the WM_COPY in external applications (firefox, opera)
Here is the code where I have included all your hints:
I loads a text file with questions and answers (like seen at the end) and displays the found question (just start the program, load the textfile into the internet browser and select a word from a question)....
Code: Select all
; Define
EnableExplicit
#Textdaten="tutor.txt"
#Maxzeilen=10000
#Maxfragen=2500
#ProgrammName="Super Tutor"
#Versionstext="V0.2"
#Idletext="-"
#Antwortkennung="»»"
#IllegaleZeichen=" !?.,:;()[]/&%$'-_"+#CRLF$
#MinAlpha=64
#MaxAlpha=240
#AlphaStep=8
#FadeOut=6000
#BrowserWait=1000
Global AlphaStatus
Global NoProblem
Global Bold
#Caption=24
#Quarter=#Caption>>2
#Space=16
#Border=1
#WinX=460
#WinY=260
#Title=#Caption+#Border
#TopLine=4
#StatusLen=60
#SearchLen=#WinX-#StatusLen-20
#Edit=#WinY-#Title
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Structure FragenTyp
Start.l
Zeilen.l
Antworten.l
EndStructure
Global Dim Text.s(#Maxzeilen)
Global Dim Fragen.FragenTyp(#Maxfragen)
Global Dim Searchlist(#Maxfragen)
Global GesamtText
Global GesamtFragen
Global SearchtextOriginal.s
Global Searchtext.s
Global SearchResult
Global Anzeige
Global WinID
Global VerlaufID
Global ImageID
Global Timer,Ticker,Now
Global Dummy.s
Global i,j,k,x,y
Global local,lol,lili,loop
Global quit
Global char.s
Global Font1=LoadFont(0,"Verdana",10,#PB_Font_Bold)
Global Font2=LoadFont(0,"Verdana",10)
Global Font1y
Global Font2y
Enumeration
#Frage
#FrageFertig
#AntwortFehlt
#Antwort
#AntwortFertig
EndEnumeration
Enumeration
#Textfeld
#Statustext
#Windowtext
#Image
#Verlauf
EndEnumeration
#TextHeader="{\rtf {\fonttbl{\f0 Verdana;}}{\colortbl ;\red255\green255\blue96;\red192\green0\blue0;\red64\green64\blue255;}"
#TextBigSum=36
#TextSmallSum=32
#TextAbsatzSum=96
Global TextBig=20
Global TextSmall=18
Global TextAbsatz=60
Declare MyDummy(x)
; ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Global Browser
Global SelectedText.s
DataSection
IID_IHTMLDocument2: ; {332C4425-26CB-11D0-B483-00C04FD90119}
Data.l $332C4425
Data.w $26CB, $11D0
Data.b $B4, $83, $00, $C0, $4F, $D9, $01, $19
IID_NULL: ; {00000000-0000-0000-0000-000000000000}
Data.l $00000000
Data.w $0000, $0000
Data.b $00, $00, $00, $00, $00, $00, $00, $00
EndDataSection
; EndDefine
Procedure.l GetIHTMLDocument2(ExplorerServerWindow)
Protected HtmlDoc.IHTMLDocument2=0
Protected OleAcc=OpenLibrary(#PB_Any, "OLEACC.DLL")
If OleAcc And GetFunction(OleAcc, "ObjectFromLresult")
Protected Message=RegisterWindowMessage_("WM_HTML_GETOBJECT")
Protected MessageResult
SendMessageTimeout_(ExplorerServerWindow, Message, 0, 0, #SMTO_ABORTIFHUNG, 1000, @MessageResult)
CallFunction(OleAcc, "ObjectFromLresult", MessageResult, ?IID_IHTMLDocument2, 0, @HtmlDoc)
CloseLibrary(OleAcc)
EndIf
ProcedureReturn HtmlDoc
EndProcedure
Procedure.s ReadBSTR(bstr)
Protected length
Protected text.s
length=WideCharToMultiByte_(#CP_ACP, 0, bstr, -1, 0, 0, 0, 0)
Text=Space(length)
WideCharToMultiByte_(#CP_ACP, 0, bstr, -1, @Text, length, 0, 0)
ProcedureReturn Text
EndProcedure
Procedure MakeBSTR(String$)
Protected Unicode$ = Space(Len(String$)*2+2)
MultiByteToWideChar_(#CP_ACP, 0, @String$, -1, @Unicode$, Len(String$)*2+2)
ProcedureReturn SysAllocString_(@Unicode$)
EndProcedure
Procedure ErrorMessage(Value)
Protected Message$ = Space(3000)
FormatMessage_(#FORMAT_MESSAGE_IGNORE_INSERTS|#FORMAT_MESSAGE_FROM_SYSTEM, 0, Value, 0, @Message$, 3000, 0)
MessageRequester("Error","Error:"+Chr(13)+Message$, #MB_ICONERROR)
EndProcedure
Procedure EnumProc(hwnd,*bingo.long)
Shared Resultstr
Protected tmp.s=Space(255)
GetClassName_(hwnd, @tmp, 255)
;Debug "Handle: " + Str(hwnd) + " Class: " + Trim(tmp)
;SendMessage_(hwnd,#WM_COPY,0,0)
;WaitWindowEvent(10)
;a.s=GetClipboardText()
;Debug Left(a,3)+" - " + Trim(tmp)
If tmp = "Internet Explorer_Server"
*bingo\l=HWnd
ProcedureReturn #False
EndIf
ProcedureReturn #True
EndProcedure
Procedure.s GetSelected(Serverwindow)
Protected Document.IHTMLDocument2
Protected Selection.IHTMLSelectionObject
Protected bstr_string
Protected bstr_name
Protected dispid
Protected text.s
Protected type.s
Protected TextRangeDispatch.IDispatch
Protected arguments.DISPPARAMS
Protected result
Protected varResult.VARIANT
Document=GetIHTMLDocument2(ServerWindow)
If Document
If Document\get_selection(@Selection.IHTMLSelectionObject)=#S_OK
; first we should check the type of the selection, because if a control
; is selected, you will get a different object from createRange()!
If Selection\get_type(@bstr_string)=#S_OK
Type=ReadBSTR(bstr_string)
SysFreeString_(bstr_string)
EndIf
Select LCase(Type)
;Case "none"
; Text=""
Case "text"
; ok, get the IDispatch for the TextRange object
If Selection\createRange(@TextRangeDispatch.IDispatch) = #S_OK
; bstr_name = MakeBSTR("htmlText") ; use this to get html code
bstr_name = MakeBSTR("text")
; get the dispid of the property we want to get
If TextRangeDispatch\GetIDsOfNames(?IID_NULL, @bstr_name, 1, 0, @dispid.l) = #S_OK
arguments.DISPPARAMS\cArgs = 0
; now read the actual property.
result= TextRangeDispatch\Invoke(dispid, ?IID_NULL, 0, #DISPATCH_PROPERTYGET, @arguments, @varResult.VARIANT, 0, 0)
If result = #S_OK And varResult\vt = #VT_BSTR
Text=ReadBSTR(varResult\bstrVal)
SysFreeString_(varResult\bstrVal)
Else
ErrorMessage(result)
EndIf
SysFreeString_(bstr_name)
EndIf
TextRangeDispatch\Release()
EndIf
;Case "control"
;MessageRequester("", "A control is selected.")
;Default
;MessageRequester("", "Error!")
EndSelect
Selection\Release()
EndIf
Document\Release()
EndIf
ProcedureReturn Text
EndProcedure
Procedure InitData()
NoProblem=#False
If FileSize(#Textdaten)>0
If ReadFile(0,#Textdaten)
NoProblem=#True
k=#AntwortFertig; nächste Zeile ist eine neue Frage...
While Eof(0)=0
Dummy=Trim(ReadString(0))
If Len(Dummy)
Select k
Case #AntwortFertig,#Frage
If (Right(Dummy,1)="?") Or ((Right(Dummy,1)=")") And (FindString(Dummy,"?",1)<>0))
If Fragen(GesamtFragen)\Start=0
Fragen(GesamtFragen)\Start=GesamtText
EndIf
Fragen(GesamtFragen)\Zeilen=GesamtText-Fragen(GesamtFragen)\Start+1
Debug Str(GesamtFragen)+": "+Str(Fragen(GesamtFragen)\Start)+"/"+Str(Fragen(GesamtFragen)\Zeilen)+" - "+Dummy
k=#FrageFertig
Else
If Fragen(GesamtFragen)\Start=0
Fragen(GesamtFragen)\Start=GesamtText
EndIf
k=#Frage
EndIf
Case #FrageFertig,#AntwortFehlt,#Antwort
k=#Antwort
If Left(Dummy,3)="***"
MyDummy('*')
ElseIf Left(Dummy,3)="+++"
MyDummy('+')
EndIf
EndSelect
Text(GesamtText)=ReplaceString(Dummy,"§","\par\tab ")
GesamtText+1
Else
Select k
Case #Frage
;NoProblem=#False
Debug "!"
;End
Case #Antwort
k=#AntwortFertig
Fragen(GesamtFragen)\Antworten=GesamtText-Fragen(GesamtFragen)\Start-Fragen(GesamtFragen)\Zeilen
;Debug ">"+Str(Fragen(GesamtFragen)\Antworten)
GesamtFragen+1
EndSelect
EndIf
;Debug GesamtText
Wend
CloseFile(0)
EndIf
EndIf
EndProcedure
Procedure.s MyFilter(x.s)
Dummy=""
loop=0
While loop<Len(x)
loop+1
char=Mid(x,loop,1)
If FindString(#IllegaleZeichen,char,1)=0
Dummy+char
EndIf
Wend
ProcedureReturn LCase(Dummy)
EndProcedure
Procedure MyDummy(x)
local=0
While PeekB(@Dummy+local)=x
local+1
Wend
Dummy=#Antwortkennung+Mid(Dummy,local+1,#MAXSHORT)
EndProcedure
Procedure MyCaption(text.s,status.s)
StartDrawing(ImageOutput(#Image))
DrawImage(VerlaufID,0,0)
If text=""
text=#ProgrammName
EndIf
DrawingMode(#PB_2DDrawing_Transparent)
DrawingFont(Font1)
DrawText(#Border+1,Font1y,text,#Black)
DrawText(#Border,Font1y-1,text,#White)
If Len(status)
DrawingFont(Font2)
lol=#WinX-TextWidth(status)
DrawText(lol+1,Font2y,status,#Black)
DrawText(lol,Font2y-1,status,#White)
EndIf
StopDrawing()
SetGadgetState(#Image,ImageID)
EndProcedure
Procedure MyText()
Dummy=#TextHeader+"\tx600\li100\sa"+Str(TextAbsatz)
If SearchResult
Dummy+"\sl-"+Str(TextBig*11)+"\fs4 \par\fs"+Str(TextBig)+"\highlight1\cf0\b"+Str(Bold)
;Dummy+"\brdrt\brdrs\brdrw10\brsp20 \brdrl\brdrs\brdrw10\brsp80 \brdrb\brdrs\brdrw10\brsp20 \brdrr\brdrs\brdrw10\brsp80 "
lol=Fragen(Searchlist(Anzeige))\Start
local=0
While local<Fragen(Searchlist(Anzeige))\Zeilen
Dummy+Text(lol+local)+"\par "
local+1
Wend
Dummy+"\fs4 \par\li600\tx600\fi-350\fs"+Str(TextSmall)+"\b0\cf0\highlight0 "
lol+local
local=0
While local<Fragen(Searchlist(Anzeige))\Antworten
Dummy+"\cf0\b "+Chr(65+local)+"\b0:\tab "
If Left(Text(lol+local),2)=#Antwortkennung
Dummy+"\b\cf2 "
Else
Dummy+"\cf3 "
EndIf
Dummy+Text(lol+local)+"\b0\par "
local+1
Wend
MyCaption(">> "+Left(SearchtextOriginal,50)+"...",Str(Anzeige+1)+" / "+Str(SearchResult))
Else
Dummy+"\fs50\b\highlight1\cf0\par \qc "+#ProgrammName+" "+#Versionstext+" \b0\cf0\highlight0\par \par\fs24\qc"
If NoProblem
Dummy+"\b1©2006 by Michael Vogel"
Else
Dummy+"\cf2\b1Tutor file corrupted!"
EndIf
MyCaption("","")
EndIf
SetGadgetText(#Textfeld,Dummy)
EndProcedure
Procedure MySearch()
;Debug Searchtext
SearchResult=0
Anzeige=0
local=0
While local<GesamtFragen
lol=0
lili=Fragen(local)\Start
Dummy=""
While lol<Fragen(local)\Zeilen
Dummy+Text(lili+lol)
lol+1
Wend
If FindString(MyFilter(Dummy),Searchtext,1)
;Debug "!!!"+Dummy
Searchlist(SearchResult)=local
SearchResult+1
EndIf
local+1
Wend
MyText()
EndProcedure
Procedure FadeWindow(mode)
If mode
lol=#MaxAlpha
local=#MinAlpha
loop=#AlphaStep
Else
lol=#MinAlpha
local=#MaxAlpha
loop=-#AlphaStep
EndIf
While local<>lol
local+loop
SetLayeredWindowAttributes_(WinID,0,local,#LWA_ALPHA)
Delay(10)
Wend
AlphaStatus=mode
Timer=#MAXLONG
While WindowEvent() : Wend
EndProcedure
Procedure.l Scale(color,a,b)
ProcedureReturn RGB(Red(color)*a/b,Green(color)*a/b,Blue(color)*a/b)
EndProcedure
Procedure InitWindow()
VerlaufID=CreateImage(#Verlauf,#WinX+#Border<<1,#Caption)
StartDrawing(ImageOutput(#Verlauf))
x=#WinX+#Border<<1
For i=0 To #Caption>>2
y=i
LineXY(0,y,x,y,$f0d0d0-Scale($006060,i,#Quarter))
y+#Caption>>2
LineXY(0,y,x,y,$a00000)
y+#Caption>>2
LineXY(0,y,x,y,$a00000+Scale($202020,i,#Quarter))
y=#Caption-i
LineXY(0,y,x,y,$400000+Scale($802020,i,#Quarter))
Next i
DrawingFont(Font1)
Font1y=(#Caption-TextHeight("Wg"))>>1
DrawingFont(Font2)
Font2y=(#Caption-TextHeight("Wg"))>>1
StopDrawing()
ImageID=CreateImage(#Image,#WinX+#Border<<1,#Caption)
#MOD_WIN=8
WinID=OpenWindow(0,GetSystemMetrics_(#SM_CXFULLSCREEN)-#WinX-#Space-#Border<<1,#Space,#WinX+#Border<<1,#WinY+#Border,#ProgrammName,#PB_Window_BorderLess|#WS_DLGFRAME|#PB_Window_Invisible)
SetWindowLong_(WinID,#GWL_EXSTYLE,GetWindowLong_(WinID,#GWL_EXSTYLE)|#WS_EX_LAYERED|#WS_EX_TOOLWINDOW)
SetLayeredWindowAttributes_(WinID,0,0,#LWA_ALPHA)
;SetWindowColor(0,#Blue)
CreateGadgetList(WindowID(0))
ImageGadget(#Image,0,0,#WinX,#Caption,ImageID)
EditorGadget(#Textfeld,#Border,#Title,#WinX,#Edit,#PB_Editor_ReadOnly)
SendMessage_(GadgetID(#Textfeld),#EM_SETTARGETDEVICE,0,0)
;TextGadget(#Windowtext,10,#TopLine,#SearchLen,20,#ProgrammName)
;SetGadgetFont(#Windowtext,Font1)
;TextGadget(#Statustext,#WinX-#StatusLen-#Border<<1,#TopLine,#StatusLen,20,"-",#PB_Text_Right)
;SetGadgetFont(#Statustext,Font2)
RegisterHotKey_(WinID,23000,#MOD_WIN,#VK_ESCAPE)
RegisterHotKey_(WinID,23001,#MOD_WIN,#VK_C)
RegisterHotKey_(WinID,23002,#MOD_WIN,#VK_V)
RegisterHotKey_(WinID,23003,#MOD_WIN|#MOD_SHIFT,#VK_V)
RegisterHotKey_(WinID,23004,#MOD_WIN,#VK_SPACE)
RegisterHotKey_(WinID,23005,#MOD_WIN|#MOD_SHIFT,#VK_C)
SetLayeredWindowAttributes_(WinID,0,0,#LWA_ALPHA)
MyText()
MyCaption("","")
StickyWindow(0,1)
HideWindow(0,0)
While WaitWindowEvent(10) : Wend
FadeWindow(1)
Now=GetTickCount_()
Timer=Now+#FadeOut
Ticker=Now+#BrowserWait<<1
;Delay(100)
;FadeWindow(0)
EndProcedure
Procedure Main()
CoInitialize_(0)
InitData()
InitWindow()
Repeat
Now=GetTickCount_()
If Now>Ticker
EnumChildWindows_(GetForegroundWindow_(),@EnumProc(),@Browser)
If Browser
SelectedText=GetSelected(Browser)
If Len(SelectedText) And (SelectedText<>SearchTextOriginal)
SearchTextOriginal=SelectedText
Searchtext=MyFilter(SearchtextOriginal)
SearchtextOriginal=ReplaceString(SearchtextOriginal,#CRLF$," ")
If NoProblem : MySearch() : EndIf
WaitWindowEvent(10)
If AlphaStatus=0
FadeWindow(1)
EndIf
Timer=GetTickCount_()+#FadeOut
EndIf
EndIf
EndIf
If Now>Timer
FadeWindow(0)
EndIf
Select WaitWindowEvent(100)
Case #PB_Event_Gadget;#WM_LBUTTONDOWN
SendMessage_(WinID,#WM_NCLBUTTONDOWN,#HTCAPTION,0)
Case #WM_RBUTTONDOWN
FadeWindow(1-AlphaStatus)
Timer=GetTickCount_()+#FadeOut
;Case #WM_PAINT
Case #WM_HOTKEY
Select EventwParam()
Case 23000
quit=1
Case 23001
;SendMessage_(GetTopWindow_(0)
;SendMessage_(GetTopWindow_(0),#WM_COPY,0,0)
;PostMessage_(GetTopWindow_(0),#WM_CHAR,3,0)
Debug "?"
PostMessage_(GetForegroundWindow_(),#WM_COPY,0,0)
Debug GetClipboardText()
PostMessage_(GetFocus_(),#WM_COPY,0,0)
Debug GetClipboardText()
PostMessage_(GetTopWindow_(0),#WM_COPY,0,0)
Debug GetClipboardText()
;SendMessage_(GetFocus_(),#WM_CHAR,3,3<<32+1)
SearchTextOriginal=GetClipboardText()
Searchtext=MyFilter(SearchtextOriginal)
SearchtextOriginal=ReplaceString(SearchtextOriginal,#CRLF$," ")
If NoProblem : MySearch() : EndIf
WaitWindowEvent(10)
If AlphaStatus=0
FadeWindow(1)
EndIf
Timer=GetTickCount_()+#FadeOut
Case 23002
If Anzeige+1<SearchResult
Anzeige+1
MyText()
EndIf
If AlphaStatus=0
FadeWindow(1)
EndIf
Timer=GetTickCount_()+#FadeOut
Case 23003
If Anzeige*SearchResult>0
Anzeige-1
MyText()
EndIf
If AlphaStatus=0
FadeWindow(1)
EndIf
Timer=GetTickCount_()+#FadeOut
Case 23004
FadeWindow(1-AlphaStatus)
Timer=GetTickCount_()+#FadeOut
Case 23005
TextBig=#TextBigSum-TextBig
TextSmall=#TextSmallSum-TextSmall
TextAbsatz=#TextAbsatzSum-TextAbsatz
MyText()
WaitWindowEvent(10)
If AlphaStatus=0
FadeWindow(1)
EndIf
Timer=GetTickCount_()+#FadeOut
EndSelect
Case #PB_Event_CloseWindow
quit=1
EndSelect
Until quit
CoUninitialize_()
EndProcedure
Main()
- This is question 1, hehehehe ?
Answer 1 (wrong)
+++Answer 2 (RIGHT!)
Answer 3 (wrong)
Answer 4 (wrong)
This is question number two....
and so on
and so on
?
Answer 1 (wrong)
Answer 2 (wrong)
***Answer 3 (RIGHT!)
+++Answer 4 (RIGHT!)