Çözüldü C# Pencere Konumu Nasıl Değiştirilir?

Bu konu çözüldü olarak işaretlenmiştir. Çözülmediğini düşünüyorsanız konuyu rapor edebilirsiniz.

576822

Centipat
Katılım
23 Ağustos 2022
Mesajlar
366
Çözümler
4
Uygulamamı açtığımda pencerenin sağ doğru kayıp soldan çıkıp şağ gitmesini ve bunun 10 saniye boyunca tekrarlanmasını istiyorum ama yapamadım. Neden böyle bir şey istiyorsun diye sorsarsanız populer viruslerin açık kaynak kodlarını değiştirip zararsız halde insanların deneyimlemesi için bir uygulama yapıyorum. Konuyla ne alaka diyebilirsiniz, pencere sağ doğru giderken pencereye nyan CAT GIF'i koyacağım genelde viruslere koyuyorlar diye :D Yardımcı olabilecek varsa sevinirim.
 
Çözüm
Native .NET bunu desteklemiyor. Interop yapmaniz gerek (user32.dll uzerinden).

1-) İslem yapmak istediğiniz class'a bu metodu ekleyin:
C#:
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);
Attribute onun interop fonksiyonu oldugunu ifade ediyor, cok kafaniz takilmasin.

2-) İhtiyacınız olan birkaç sabit:
C#:
const short SWP_NOMOVE = 0X2;
const short SWP_NOSIZE = 1;
const short SWP_NOZORDER = 0X4;
const int SWP_SHOWWINDOW = 0x0040;
Bunlar methodu cagırmak icin kullanabileceginiz parametrelerin degerleri.

3-) Aktif Window'un window handle'ını alma:
C#:
IntPtr handle = this.Handle;

4-) Metodu kendinize göre cagırın. Sizin durumunuzda dongude calıstırmanız gerekiyor.
Ben size temel cagırma argumanlarını vereyim.
C#:
SetWindowPos(handle, 0, x, y, width, height, SWP_NOZORDER | SWP_SHOWWINDOW);
x: Ayarlanacak x noktası.
y: Ayarlanacak y noktası.
width: Pencerenin yatay uzunlugu.
height: Pencerenin dikey uzunlugu.

Simdi baktım,
C#:
this.Location = new Point(x, y);
Bu da calısır gibi. Eger bu calısırsa usttekini kullanmayin. Nedense baska bir pencereyi kontrol etmeye gitti aklim. Bu daha kolay.

(Edit: Üstteki kodu farklı bir pencereyi hareket ettirmek için kullanabilirsiniz. Bu daha önce sorulmuştu o yüzden cevabı düzenlemiyorum.)
Native .NET bunu desteklemiyor. Interop yapmaniz gerek (user32.dll uzerinden).

1-) İslem yapmak istediğiniz class'a bu metodu ekleyin:
C#:
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);
Attribute onun interop fonksiyonu oldugunu ifade ediyor, cok kafaniz takilmasin.

2-) İhtiyacınız olan birkaç sabit:
C#:
const short SWP_NOMOVE = 0X2;
const short SWP_NOSIZE = 1;
const short SWP_NOZORDER = 0X4;
const int SWP_SHOWWINDOW = 0x0040;
Bunlar methodu cagırmak icin kullanabileceginiz parametrelerin degerleri.

3-) Aktif Window'un window handle'ını alma:
C#:
IntPtr handle = this.Handle;

4-) Metodu kendinize göre cagırın. Sizin durumunuzda dongude calıstırmanız gerekiyor.
Ben size temel cagırma argumanlarını vereyim.
C#:
SetWindowPos(handle, 0, x, y, width, height, SWP_NOZORDER | SWP_SHOWWINDOW);
x: Ayarlanacak x noktası.
y: Ayarlanacak y noktası.
width: Pencerenin yatay uzunlugu.
height: Pencerenin dikey uzunlugu.

Simdi baktım,
C#:
this.Location = new Point(x, y);
Bu da calısır gibi. Eger bu calısırsa usttekini kullanmayin. Nedense baska bir pencereyi kontrol etmeye gitti aklim. Bu daha kolay.

(Edit: Üstteki kodu farklı bir pencereyi hareket ettirmek için kullanabilirsiniz. Bu daha önce sorulmuştu o yüzden cevabı düzenlemiyorum.)
 
Son düzenleyen: Moderatör:
Çözüm
Native .NET bunu desteklemiyor. Interop yapmaniz gerek (user32.dll uzerinden).

1-) islem yapmak istediğiniz Class'a bu metodu ekleyin:
C#:
[DllImport("user32.dll", EntryPoint = "SetWindowPos")]
public static extern IntPtr SetWindowPos(IntPtr hWnd, int hWndInsertAfter, int x, int Y, int cx, int cy, int wFlags);
Attribute onun interop fonksiyonu oldugunu ifade ediyor, cok kafaniz takilmasin.

2-) ihtiyacınız olan birkaç sabit:
C#:
const short SWP_NOMOVE = 0X2;
const short SWP_NOSIZE = 1;
const short SWP_NOZORDER = 0X4;
const int SWP_SHOWWINDOW = 0x0040;
Bunlar methodu cagırmak icin kullanabileceginiz parametrelerin degerleri.

3-) aktif Window'un window Handle'ını alma:
C#:
IntPtr handle = this.Handle;

4-) metodu kendinize göre cagırın. Sizin durumunuzda dongude calıstırmanız gerekiyor.
Ben size temel cagırma argumanlarını vereyim.
C#:
SetWindowPos(handle, 0, x, y, width, height, SWP_NOZORDER | SWP_SHOWWINDOW);
X: Ayarlanacak X noktası.
Y: Ayarlanacak y noktası.
Width: Pencerenin yatay uzunlugu.
Height: Pencerenin dikey uzunlugu.

Simdi baktım,
C#:
this.Location = new Point(x, y);
bu da calısır gibi. Eger bu calısırsa usttekini kullanmayin. Nedense baska bir pencereyi kontrol etmeye gitti aklim. Bu daha kolay.

Sağ olun hocam en son verdiğiniz koda ihtiyacım vardı :)
 

Yeni konular

Geri
Yukarı