B
guten tag,
ich habe hier im forum einen tollen code gefunden und leicht modifiziert:
int LoadBmp2Console(char *szBitmap, int PosX, int PosY)
{
foreground = GetForegroundWindow();
hdc = GetDC(foreground);
HBITMAP hBitmap = (HBITMAP)LoadImage(NULL,szBitmap,
IMAGE_BITMAP,0,0,LR_LOADFROMFILE);
if (!hBitmap) return 1;
BITMAP bmp;
GetObject(hBitmap,sizeof(bmp),&bmp);
HWND hwnd = foreground;
if (!hwnd) return 2;
HDC hDC = GetDC(foreground);
if (!hDC) return 3;
HDC hBitmapDC = CreateCompatibleDC(hDC);
if (!hBitmapDC) return 4;
SelectObject(hBitmapDC,hBitmap);
BitBlt(hDC,PosX,PosY,640,480,hBitmapDC,0,0,SRCCOPY);
DeleteObject(hBitmap);
ReleaseDC(hwnd,hBitmapDC);
ReleaseDC(hwnd,hDC);
return 0;
}
LoadBmp2Console("test.bmp",0,0);
ich kann damit ohne probleme in windows XP bilder über fremndprozesse "malen".
(auch in vollbildspielen)
jetzt hab ich das in vista und windows 7 getestet wo es nicht so reibungslos funktioniert.
manchmal, wird das bild einfach nicht angezeigt im schnitt klappt es in 3 von 5 versuchen.
ich habe es an zwei verschiedenen pcs getestet und immer das gleiche problem.
es muss wohl am system liegen oder vielleicht streikt auch DX?!
hat irgendjemand eine idee, wie ich den code "optimieren" kann bzw. das programm reibungslos in vista / 7 zum laufen kriege, dass das bild auch auf wunsch immer angezeigt wird?
oder kennt jemand eine gute alternative zu dem code?
mein ziel ist es, ein bild (640x480) über vollbildspiele (640x480) malen zu können
mit flimmern hab ich bei meinem zielprozess keine probleme, da ich jenen pausiere wenn das bild angezeigt wird.
gibt es eine einfacherer möglichkeit einfach in bild komplett mit einem anderen zu übermahlen wenn der zielprozess "ruhig steht" ?
gruss
BigL
PS:
ich habe testweise auch einfach mal mit
SetPixel( hdc, 10,10, RGB( 255, 0, 0 ) );
ein pixel in den Fremdprozess gemalt, das gleiche problem....