![]() |
Anzeige:
|
|
|||||||
| XProfan Alles rund um die Programmiersprache XProfan. |
|
![]() |
|
|
LinkBack | Themen-Optionen | Ansicht |
|
|
#1 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Warum funktioniert das folgende Programm, wenn ich in das erste Feld der Statusleiste was schreiben will, aber bei den anderen Feldern nicht? Bzw., wie würde das funktionieren?
Code:
proc Callback
parameters st&
messagebox(ClassOf(st&),"",0)
while 1
SetText st&,Str$(&GetTickCount)
Sleep 100
endwhile
endproc
cls
declare b#
dim b#,8
Long b#,0=100,100
var st&=Create("StatusWindow",%hWnd,"",2,b#)
Dispose b#
var h&=PExec("|Callback",st&)
Print ClassOf(st&)
waitinput
KillProcess h&
progend
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
|
#2 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
|
Normalerweise sollte es ja so aussehen
Code:
SetText st&,0,Str$(&GetTickCount) SetText st&,1,Str$(&GetTickCount) Bei der Gelegenheit ist mir aufgefallen, das Pexec eine gefährliche Funktion ist. Ich hatte beim Testen in der Callback Proc einen Fehler produziert und der war nicht mehr zu stoppen, da der Thread trotz des Fehlers munter weiter aufgerufen wird. Das Programm war nicht mehr zu beenden.
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai. http://dieterzornow.gmxhome.de |
|
|
|
|
|
#3 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
|
Du hast auch einen Fehler im Create, muss so aussehen
declare b# dim b#,8 Long b#,0 = 100,200 var st&=Create("StatusWindow",%hWnd,"",2,b#) Dispose b# kannst nicht 100,100 schreiben, mir 200 gehts
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai. http://dieterzornow.gmxhome.de |
|
|
|
|
|
#4 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Argh, stimmt. Das erste war ein Fehler meinerseits, das hatte ich auch schon mit dem zusätzlichen Parameter probiert, ging aber trotzdem nicht. Beim zweiten habe ich nicht daran gedacht, dass dort absolute Koordinaten genommen werden, was ja meist unüblich ist. Ich probier gleich nochmal vor mich hin.
Danke, Jac Nachtrag: Code:
proc Callback
parameters st&
messagebox(ClassOf(st&),"",0)
while 1
SetText st&,1,Str$(&GetTickCount)
Sleep 100
endwhile
endproc
cls
declare b#
dim b#,8
Long b#,0=100,200
var st&=Create("StatusWindow",%hWnd,"",2,b#)
Dispose b#
var h&=PExec("|Callback",st&)
Print ClassOf(st&)
waitinput
KillProcess h&
progend
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#5 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
|
Kannst du das mal bei dir testen, bei mir gibt es die seltsamsten Ergebnisse, manchmal werden irgendwelche Zeichen angezeigt, aber nie die richtigen, manchmal wird gar nichts angezeigt und manchmal stürzt alles ab.
Code:
proc Callback
parameters Hwnd&,st&
settext hwnd&,ClassOf(st&)
var w& = 1
Window 1,1-200,100
while w&
w& = external("User32","IsWindow",Hwnd&)
SetText st&,0,dt("getdate", 6)
SetText st&,1,Str$(&GetTickCount)
SetText st&,2,dt("getdate", 6)
Print "Ich bin noch hier"
Sleep 200
endwhile
end
endproc
Windowstyle 31 + 512
window 600,300
var ende% = 0
declare b#
dim b#,12
Long b#,0=100,300,-1
var st&=Create("StatusWindow",%hWnd,"",3,b#)
Dispose b#
var h&=PExec("|Callback",%Hwnd,st&)
Print ClassOf(st&)
whilenot ende%
waitinput
ende% = 1
endwhile
end
Ich denke die Sache ist noch nicht rund
__________________
Er ist ein Mann wie ein Baum. Sie nennen ihn Bonsai. http://dieterzornow.gmxhome.de Geändert von Bangkok (14.05.2010 um 10:10 Uhr) |
|
|
|
|
|
|
#6 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Ja, ich hatte auch schon seltsame Einträge aus irgendwelchen Listboxen und so.
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#7 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Hallo,
so wie es aussieht, gibt es Controls und Messages (und hinter SetText verbergen sich je nach Ziel-Control unterschiedliche Messages), die sich nicht zwischen verschiedenen Prozessen versenden lassen. SetText() auf eine Statuszeile eines fremden Prozesses gehört offensichtlich dazu. Gruß Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c http://www.xprofan.de |
|
|
|
|
|
#8 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Das ist sehr schade, besonders weil es mit der SetTimer-API funktioniert hat. Ich weiß, dort funktionierts ein wenig anders. Damit ist PExec wohl doch nicht ganz so gut wie gedacht.
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#9 (Direktlink) | |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Zitat:
Ich hoffe, beim zum XProfaner-Treffen einen Release-Kandidaten von XProfan 12 mitzubringen. Gruß Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c http://www.xprofan.de |
|
|
|
|
|
|
#10 (Direktlink) | |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Zitat:
WM_SETTEXT würde noch gehen für das linke Panel, aber Messages ( Sendmessage ) kanst Du wohl nur per DLL und Hook versenden. Soll heissen : Du musst die Dll in das laufende Programm injizieren und aus der Dll heraus Sendmessage(SB_SETTEXT) aufrufen. So wird das wahrscheinlich mit allen Controls laufen, bei denen Settext nicht WM_SETTEXT benutzt.
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
|
|
#11 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Geht doch ohne Hook, aber einfach ist es trotzden nicht. Du musst Dich schon in den Process einklinken. Sollte aber auch mit Delphi möglich sein.
Code:
$H messages.ph
Proc Callback
ImportDll("Kernel32.dll","")
Parameters PID&,Hwnd&,st&
Declare remote_process&,remote_struct&,res&
settext hwnd&,ClassOf(st&)
var w& = 1
Var T$ = ""
Var text$ = "irgendwas"
Window 1,1-200,100
While external("User32","IsWindow",Hwnd&)
'Panel 0
t$ = dt("getdate", 6)
sendmessage(st&,~WM_SETTEXT,0,addr(t$))
'ab hier werden die anderen Panels bestückt !
'Panel 1
remote_process& = OpenProcess($38,0,pid&)
remote_struct& = VirtualAllocEx(remote_process&,0,len(Text$),$1000,$4)
res& = WriteProcessMemory(remote_process&,remote_struct&,addr(Text$),len(Text$),0)
SendMessage(st&,1025,1,remote_struct&)'SB_SETTEXT
VirtualFreeEx(remote_process&,remote_struct&,0,$8000 )
CloseHandle(remote_process&)
'Panel 2
remote_process& = OpenProcess($38,0,pid&)
remote_struct& = VirtualAllocEx(remote_process&,0,len(T$),$1000,$4)
res& = WriteProcessMemory(remote_process&,remote_struct&,addr(T$),len(T$),0)
SendMessage(st&,1025,2,remote_struct&)'SB_SETTEXT
VirtualFreeEx(remote_process&,remote_struct&,0,$8000 )
CloseHandle(remote_process&)
Waitinput 1000
endwhile
end
endproc
Windowstyle 31 + 512
window 600,300
var ende% = 0
declare b#
dim b#,12
Long b#,0=200,300,-1
var st&=Create("StatusWindow",%hWnd,"",3,b#)
Dispose b#
var h&=PExec("|Callback",&PID,%Hwnd,st&)
Print ClassOf(st&)
whilenot ende%
waitinput
ende% = 1
endwhile
End
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
#12 (Direktlink) |
|
Stammuser
![]() Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
|
Und so geht es ohne die PID und %hwnd zu übergeben.
Code:
$H windows.ph
$H messages.ph
Proc Callback
ImportDll("Kernel32.dll","")
Parameters st&
Declare remote_process&,remote_struct&,res&
'ProcessID von Fensterhandle
Declare PID&,hwnd&
'Elternfenster von Statusbar
hwnd& = ~GetParent(st&)
~GetWindowThreadProcessId(hwnd&,Addr(PID&))
settext hwnd&,ClassOf(st&)
var w& = 1
Var T$ = ""
Var T1$ = ""
Var text$ = "irgendwas"
Window 1,1-200,100
While external("User32","IsWindow",Hwnd&)
'Panel 0
t$ = dt("getdate", 2)
sendmessage(st&,~WM_SETTEXT,0,addr(t$))
'ab hier werden die anderen Panels bestückt !
'Panel 1
remote_process& = OpenProcess($38,0,pid&)
remote_struct& = VirtualAllocEx(remote_process&,0,len(Text$),$1000,$4)
res& = WriteProcessMemory(remote_process&,remote_struct&,addr(Text$),len(Text$),0)
SendMessage(st&,1025,1,remote_struct&)'SB_SETTEXT
VirtualFreeEx(remote_process&,remote_struct&,0,$8000 )
CloseHandle(remote_process&)
'Panel 2
t1$ = right$(dt("getdate", 6),8)
remote_process& = OpenProcess($38,0,pid&)
remote_struct& = VirtualAllocEx(remote_process&,0,len(T1$),$1000,$4)
res& = WriteProcessMemory(remote_process&,remote_struct&,addr(T1$),len(T1$),0)
SendMessage(st&,1025,2,remote_struct&)'SB_SETTEXT
VirtualFreeEx(remote_process&,remote_struct&,0,$8000 )
CloseHandle(remote_process&)
Waitinput 1000
endwhile
end
endproc
Windowstyle 31 + 512
window 600,300
var ende% = 0
declare b#
dim b#,12
Long b#,0=200,300,-1
var st&=Create("StatusWindow",%hWnd,"",3,b#)
Dispose b#
var h&=PExec("|Callback",st&)
whilenot ende%
waitinput
ende% = 1
endwhile
End
__________________
Gruss Andreas ______________________ http://www.ampsoft.eu Profan 3.3 - XProfanX2 Windows 95,98,ME,2000,XP Vista - Windows 7 32 / 64 Bit ASUS X93S - Intel Core I7 - NVIDIA GForce GT540M - 8GB Arbeitsspeicher |
|
|
|
|
|
#13 (Direktlink) |
|
Super-Moderator
![]() Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
|
Wow, das ist beeindruckend. Ich warte mal auf Rolands Antwort.
__________________
XProfan-Profi (XProfan X2+XPIA) http://jacdelad.bplaced.net http://jacdelad.square7.ch |
|
|
|
|
|
#14 (Direktlink) |
|
Dauergast
![]() Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.082
|
Geht PExec schon in XPro11.2a? Bei mir kommt "Unbekannte Funktion"...
Wie wäre das dort nachzubauen?
__________________
Win7-64HomPremSP1,XProfan11.2a,XPIA,JWasm,XPSE,IntelCoreQuad2.5GHz/4GB/je1TB HD intern:esataBay:USB2:USB3 |
|
|
|
|
|
#15 (Direktlink) |
|
Forenmaskottchen
![]() Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
|
Tja, das ist so eine Sache. Natürlich kann man Andreas' Vorlage in seinem Programm folgen.
Aber wie ich Jac kenne, hätte er gerne, dass XProfan die Arbeit für ihn erledigt. Das ist natürlich nicht ganz ohne, denn SetText weiß ja nicht, dass der erste Parameter das Control eines anderen Prozesses ist. Natürlich könnte ich jetzt immer abfragen, ob die PID des Controls mit der PID des aktuellen Prozesses übereinstimmt ... Und wenn ich das für SetText einbaue, dann kommen weitere Begehrlichkeiten, deren Ende unabsehbar ist ... Ich muss mal drüber nachdenken, ob mir da eine praktikable und in endlicher Zeit einbaubare Lösung einfällt ... Gruß Roland
__________________
Pentium D 2,8 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon HD5450 1024 MB / Windows 7(32) - XProfan X2.0c AMD Athlon II X2 2,9 GHz / 3 GB RAM / 500 GB HDD / ATI Radeon 3000 / Windows 7(64) - XProfan X2.0c http://www.xprofan.de |
|
|
|
|
![]() |
|
| Lesezeichen |
| Themen-Optionen | |
| Ansicht | |
|
|
Ähnliche Themen
|
||||
| Thema | Autor | Forum | Antworten | Letzter Beitrag |
| Direct3D Problem NEUES PROBLEM | Bonser | Treiber-Forum | 3 | 28.11.2007 14:42 |
| Problem mit Game. Grafiktreiber Problem?!?! | Chillers | Hardware - Problemlösungen | 4 | 16.05.2006 16:13 |
| Counter Strike: Server Problem sowie Online Problem | Simon@Xp | Computerspiele | 4 | 10.04.2006 14:30 |
| Bildschirm friert ein - DirectX Problem - ATI-Problem | LudBri | Allgemein | 1 | 01.01.2006 13:02 |
| Problem (Keine Ahnung, welches Problem das ist) | Der_Gast | Hardware - Problemlösungen | 3 | 11.10.2003 18:17 |