odio a esa api.
Asi nomas les digo.
Tengo el hdc.
Uso getpixel DESDE el IDE y funciona de 10.
Lo compilo y me da error 308
Alguien tiene idea de que corno me pasa?
Consigo el hwnd con findwindow
consigo el hdc con getdc o con getwindowdc
y de ahi hago getpixel.
en que puedo estar fallando? :'(
Y falla en el call de la API o despues?
normalmente la api tira -1 como resultado a pesar que deberia tirar rojo.
Sino directamente recibo un error 308 cuando llega a la llamada de la api.
Se pone peor. pongo el getpixel COPIADO de otro proyecto que tengo y tampoco anda y en el otro proyecto si.
Probe de compilar a nativo y a p-code y es lo mismo (por las dudas)
Podes poner un link para bajar el EXE? (No digo todo el EXE, sino uno que muestre el error)
Ah! Y el pedazo de codigo que genera el error.
Digo, asi se podria reproducir el error...
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetPixel Lib "GDI32" (ByVal hDC As Long, ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long
Dim window As Long
Dim dc As Long
Dim color As Long
Private Sub Form_Load()
window = FindWindow("ThunderRT6FormDC", vbNullString)
MsgBox window
dc = GetWindowDC(window)
MsgBox dc
color = GetPixel(dc, 600, 500)
MsgBox color
End Sub
Empeoro, ahora no anda ni de la IDE.
Puede ser que este funcionando mal porque estoy en windwos 7? :S
Probe ese mismo codigo en un VM con XP SP3 y en el IDE no encuentra la ventana (pero no falla).
Como exe si encuentra la ventana, pero como dijiste, GetPixel devuelve -1.
Ahora, en ningun caso tira el error...
Acabo de hacer un descubrimiento BRUTAL :D
"ThunderRT6FormDC"
Es el generico para un exe de vb6.0
El programa al que yo intento afectar es de vb6.0 y el mio tambien.
TENGO UN SUPER CONFLICTO RE PULENTA :D
Tengo que ser mas especifico :D
Vuelvo despues y les cuento ;)
SANTO REMEDIO :P
Tenia un conflicto en las clases.
Correji eso y sali andando en moto :D
Cita de: Elemental Code en 6 Septiembre 2012, 23:50 PM
Tenia un conflicto en las clases.
Option Explicit
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Dim window As Long
Private Sub Form_Load()
If App.LogMode = 0 Then
window = FindWindow("ThunderFormDC", vbNullString) ' IDE
ElseIf App.LogMode = 1 Then
window = FindWindow("ThunderRT6FormDC", vbNullString) ' EXE
End If
MsgBox window, , "LogMode " & App.LogMode
End Sub