Paules-PC-Forum.de Anzeige:

Microsoft Windows Intune: PC-Verwaltung und -Sicherheit in der Cloud: Updateverwaltung, Anti-Virus und vieles mehr!


Zurück   Paules-PC-Forum.de > Programmierung > XProfan

XProfan Alles rund um die Programmiersprache XProfan.

EM-Tippspiel

Paule bei Facebook


Paule bei Twitter


Letzte Forenthemen
Gehe zum ersten neuen Beitrag Hamachi deinstallieren
Aufrufe: 58, Antworten: 5
Gehe zum ersten neuen Beitrag Bundesliga-Tippspiel Saision...
Aufrufe: 7670, Antworten: 187
Gehe zum ersten neuen Beitrag PPF - Spiel "Wörter weiter...
Aufrufe: 26970, Antworten: 4223
Gehe zum ersten neuen Beitrag PPF - Shoppingwahn
Aufrufe: 50963, Antworten: 1397
Gehe zum ersten neuen Beitrag Algorithmen Teil IV...
Aufrufe: 3361, Antworten: 128
Gehe zum ersten neuen Beitrag Pc lahmt plötzlich
Aufrufe: 186, Antworten: 6
Gehe zum ersten neuen Beitrag PC fährt nicht mehr hoch.
Aufrufe: 0, Antworten: 0
Gehe zum ersten neuen Beitrag Von Live CD Windowspfad...
Aufrufe: 329, Antworten: 19
Gehe zum ersten neuen Beitrag Captur 2.2 (Snow Leo)
Aufrufe: 28, Antworten: 0
Gehe zum ersten neuen Beitrag Captur 2.3 (Lion)
Aufrufe: 34, Antworten: 0
Zeige:





Antwort
 
LinkBack Themen-Optionen Ansicht
Alt 13.05.2010, 20:07   #1 (Direktlink)
Super-Moderator
 
Benutzerbild von Jac de Lad
 
Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
Standard Problem mit PExec

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
Jac
__________________
XProfan-Profi (XProfan X2+XPIA)
http://jacdelad.bplaced.net
http://jacdelad.square7.ch
Jac de Lad ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 13.05.2010, 21:14   #2 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

Normalerweise sollte es ja so aussehen

Code:
SetText st&,0,Str$(&GetTickCount)
SetText st&,1,Str$(&GetTickCount)
das Feld 0 funktioniert auch aber das Feld 1 nicht, auch wenn man es ohne den Prozess verwendet. Scheint ein Fehler in Profan vorzuliegen.

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
Bangkok ist offline   Mit Zitat antworten
Alt 13.05.2010, 21:22   #3 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

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
Bangkok ist offline   Mit Zitat antworten
Alt 13.05.2010, 22:24   #4 (Direktlink)
Super-Moderator
 
Benutzerbild von Jac de Lad
 
Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
Standard

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
Funktioniert aber leider auch nicht.
__________________
XProfan-Profi (XProfan X2+XPIA)
http://jacdelad.bplaced.net
http://jacdelad.square7.ch
Jac de Lad ist offline   Mit Zitat antworten
Alt 14.05.2010, 09:50   #5 (Direktlink)
Forenmaskottchen
 
Benutzerbild von Bangkok
 
Registriert seit: 09.02.2009
Ort: Bangkok
Beiträge: 686
Standard

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 habe immer den Taskmanager laufen, wenn es abstürzt ist es auf normalem Weg nicht mehr zu stoppen, nur über Processe im Taskmanger.
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)
Bangkok ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 14.05.2010, 10:16   #6 (Direktlink)
Super-Moderator
 
Benutzerbild von Jac de Lad
 
Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
Standard

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
Jac de Lad ist offline   Mit Zitat antworten
Alt 14.05.2010, 10:40   #7 (Direktlink)
RGH
Forenmaskottchen
 
Benutzerbild von RGH
 
Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
Standard

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
RGH ist offline   Mit Zitat antworten
Alt 14.05.2010, 10:45   #8 (Direktlink)
Super-Moderator
 
Benutzerbild von Jac de Lad
 
Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
Standard

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
Jac de Lad ist offline   Mit Zitat antworten
Alt 14.05.2010, 11:35   #9 (Direktlink)
RGH
Forenmaskottchen
 
Benutzerbild von RGH
 
Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
Standard

Zitat:
Zitat von Jac de Lad Beitrag anzeigen
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.
Noch bestehen Chancen, dass ich da etwas ändern kann. Ich würde es auch gerne sehen, wenn gerade SetText mit möglichst vielen Controls Prozess-sicher wäre.

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
RGH ist offline   Mit Zitat antworten
Alt 14.05.2010, 18:07   #10 (Direktlink)
Stammuser
 
Benutzerbild von Andreas Miethe
 
Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
Standard

Zitat:
Zitat von RGH Beitrag anzeigen
Noch bestehen Chancen, dass ich da etwas ändern kann. Ich würde es auch gerne sehen, wenn gerade SetText mit möglichst vielen Controls Prozess-sicher wäre.
Ich fürchte das wird mit Statusbars nicht einfach werden.

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
Andreas Miethe ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Alt 14.05.2010, 18:35   #11 (Direktlink)
Stammuser
 
Benutzerbild von Andreas Miethe
 
Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
Standard

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
Andreas Miethe ist offline   Mit Zitat antworten
Alt 14.05.2010, 18:58   #12 (Direktlink)
Stammuser
 
Benutzerbild von Andreas Miethe
 
Registriert seit: 08.02.2009
Ort: Bielefeld
Alter: 53
Beiträge: 428
Standard

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
Andreas Miethe ist offline   Mit Zitat antworten
Alt 14.05.2010, 20:36   #13 (Direktlink)
Super-Moderator
 
Benutzerbild von Jac de Lad
 
Registriert seit: 06.02.2009
Ort: Coswig
Alter: 27
Beiträge: 1.159
Standard

Wow, das ist beeindruckend. Ich warte mal auf Rolands Antwort.
__________________
XProfan-Profi (XProfan X2+XPIA)
http://jacdelad.bplaced.net
http://jacdelad.square7.ch
Jac de Lad ist offline   Mit Zitat antworten
Alt 14.05.2010, 21:38   #14 (Direktlink)
Dauergast
 
Benutzerbild von p. specht
 
Registriert seit: 06.02.2009
Ort: Wien, Österreich
Beiträge: 1.082
Standard

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
p. specht ist gerade online   Mit Zitat antworten
Alt 14.05.2010, 21:48   #15 (Direktlink)
RGH
Forenmaskottchen
 
Benutzerbild von RGH
 
Registriert seit: 08.02.2009
Ort: Nußloch (bei Heidelberg)
Beiträge: 550
Standard

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
RGH ist offline   Mit Zitat antworten
Werbung

Windows 7 Tipps und Tricks in Bildern

Antwort

  Paules-PC-Forum.de > Programmierung > XProfan

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are an


Ä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



Alle Zeitangaben in WEZ +2. Es ist jetzt 12:10 Uhr.


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2012, vBulletin Solutions, Inc.
Powered by vBCMS® 2.7.0 ©2002 - 2012 vbdesigns.de
(c) Paules-PC-Forum.de

::: Impressum :::

Search Engine Optimization by vBSEO 3.3.2