Saya telah menjadi pengembang NET selama beberapa tahun sekarang dan ini masih salah satu hal yang saya tidak tahu bagaimana melakukannya dengan benar. Sangat mudah untuk menyembunyikan jendela dari bilah tugas melalui properti di Formulir Windows dan WPF, tetapi sejauh yang saya tahu, ini tidak menjamin (atau bahkan mempengaruhi) itu disembunyikan dari dialog Alt+ ↹Tab. Saya telah melihat jendela tak terlihat muncul di Alt+ ↹Tab, dan saya hanya bertanya-tanya apa cara terbaik untuk menjamin jendela tidak akan pernah muncul (terlihat atau tidak) di dialog Alt+ ↹Tab.
Pembaruan: Silakan lihat solusi saya yang diposting di bawah ini. Saya tidak diizinkan menandai jawaban saya sendiri sebagai solusi, tetapi sejauh ini hanya satu yang berhasil.
Pembaruan 2: Sekarang ada solusi yang tepat dari Franci Penov yang terlihat cukup bagus, tetapi belum mencobanya sendiri. Melibatkan beberapa Win32, tetapi menghindari pembuatan jendela di luar layar yang timpang.
Jawaban:
Memperbarui:
Menurut @donovan, WPF modern mendukung ini secara asli, melalui pengaturan
ShowInTaskbar="False"
danVisibility="Hidden"
di XAML. (Saya belum menguji ini, tetapi memutuskan untuk meningkatkan visibilitas komentar)Jawaban asli:
Ada dua cara untuk menyembunyikan jendela dari pengalih tugas di Win32 API:
WS_EX_TOOLWINDOW
gaya jendela yang diperluas - itulah pendekatan yang tepat.Sayangnya, WPF tidak mendukung kontrol fleksibel atas gaya jendela seperti Win32, sehingga jendela dengan
WindowStyle=ToolWindow
berakhir dengan gayaWS_CAPTION
dan defaultWS_SYSMENU
, yang menyebabkannya memiliki keterangan dan tombol tutup. Di sisi lain, Anda dapat menghapus dua gaya ini dengan mengaturWindowStyle=None
, namun itu tidak akan mengaturWS_EX_TOOLWINDOW
gaya yang diperluas dan jendela tidak akan disembunyikan dari pengalih tugas.Untuk memiliki jendela WPF
WindowStyle=None
yang juga tersembunyi dari pengalih tugas, salah satu dari dua cara dapat dilakukan:WS_EX_TOOLWINDOW
gaya yang diperluas.Saya pribadi lebih suka pendekatan kedua. Kemudian lagi, saya melakukan beberapa hal lanjutan seperti memperluas kaca di area klien dan mengaktifkan gambar WPF di caption, jadi sedikit interop bukanlah masalah besar.
Berikut kode contoh untuk pendekatan solusi interop Win32. Pertama, bagian XAML:
Tidak ada yang terlalu mewah di sini, kami hanya mendeklarasikan jendela dengan
WindowStyle=None
danShowInTaskbar=False
. Kami juga menambahkan penangan ke acara Loaded di mana kami akan memodifikasi gaya jendela diperpanjang. Kami tidak dapat melakukan pekerjaan itu di konstruktor, karena belum ada pegangan jendela pada saat itu. Pengendali acara itu sendiri sangat sederhana:Dan deklarasi interop Win32. Saya telah menghapus semua gaya yang tidak perlu dari enum, hanya untuk menjaga kode contoh di sini tetap kecil. Juga, sayangnya
SetWindowLongPtr
titik masuk tidak ditemukan di user32.dll pada Windows XP, oleh karena itu trik dengan merutekan panggilan melaluiSetWindowLong
alih - alih.sumber
Di dalam kelas formulir Anda, tambahkan ini:
Semudah itu; bekerja dengan sangat baik!
sumber
Saya telah menemukan solusinya, tetapi itu tidak bagus. Sejauh ini, ini adalah satu - satunya hal yang saya coba yang benar-benar berfungsi:
Ketemu di sini .
Solusi yang lebih umum dan dapat digunakan kembali akan menyenangkan. Saya kira Anda dapat membuat satu jendela 'w' dan menggunakannya kembali untuk semua jendela di aplikasi Anda yang perlu disembunyikan dari Alt+ ↹Tab.
Pembaruan: Ok jadi apa yang saya lakukan adalah memindahkan kode di atas, minus
this.Owner = w
bit (dan bergerakw.Hide()
segera setelahnyaw.Show()
, yang berfungsi dengan baik) ke konstruktor aplikasi saya, membuat statis publik yangWindow
disebutOwnerWindow
. Setiap kali saya ingin jendela untuk menunjukkan perilaku ini, saya cukup menyetelnyathis.Owner = App.OwnerWindow
. Bekerja dengan baik, dan hanya melibatkan pembuatan satu jendela ekstra (dan tidak terlihat). Anda bahkan dapat menyetelthis.Owner = null
jika ingin jendela tersebut muncul kembali di dialog Alt+ ↹Tab.Terima kasih kepada Ivan Onuchin di forum MSDN untuk solusinya.
Update 2: Anda juga harus menetapkan
ShowInTaskBar=false
padaw
untuk mencegah dari berkedip sebentar di taskbar ketika ditampilkan.sumber
-100000
mungkin akan lebih baik.Mengapa begitu rumit? Coba ini:
Ide diambil dari sini: http://www.csharp411.com/hide-form-from-alttab/
sumber
Inilah triknya, terlepas dari gaya jendela yang Anda coba sembunyikan dari Alt+ ↹Tab.
Tempatkan berikut ini ke dalam konstruktor formulir Anda:
Pada dasarnya, Anda membuat formulir Anda menjadi anak dari jendela tak terlihat yang memiliki gaya dan pengaturan ShowInTaskbar yang benar agar tidak masuk ke daftar Alt-Tab. Anda juga harus menyetel properti ShowInTaskbar formulir Anda sendiri ke false. Yang terbaik dari semuanya, tidak masalah gaya apa yang dimiliki formulir utama Anda, dan semua penyesuaian untuk menyelesaikan persembunyian hanyalah beberapa baris dalam kode konstruktor.
sumber
Mengapa mencoba begitu banyak kode? Atur saja
FormBorderStyle
propety keFixedToolWindow
. Semoga membantu.sumber
lihat: (dari http://bytes.com/topic/c-sharp/answers/442047-hide-alt-tab-list#post1683880 )
sumber
Dalam XAML set ShowInTaskbar = "False":
Sunting: Itu masih menunjukkannya di Alt + Tab saya kira, hanya saja tidak di bilah tugas.
sumber
Saya mencoba mengatur visibilitas formulir utama menjadi salah setiap kali secara otomatis diubah menjadi benar:
Ini bekerja dengan sempurna :)
sumber
jika Anda ingin formulir menjadi tanpa batas, maka Anda perlu menambahkan pernyataan berikut ke konstruktor formulir:
DAN Anda harus menambahkan metode berikut ke kelas Formulir turunan Anda:
keterangan lebih lanjut
sumber
Jangan tampilkan formulir. Gunakan tembus pandang.
Selengkapnya di sini: http://code.msdn.microsoft.com/TheNotifyIconExample
sumber
Properti Form1:
FormBorderStyle : WindowState yang cukup besar
:
ShowInTaskbar yang diminimalkan : False
sumber
Secara pribadi sejauh yang saya tahu ini tidak mungkin tanpa menghubungkan ke jendela dengan cara tertentu, saya bahkan tidak yakin bagaimana itu akan dilakukan atau apakah itu mungkin.
Bergantung pada kebutuhan Anda, mengembangkan konteks aplikasi Anda sebagai aplikasi NotifyIcon (system tray) akan memungkinkannya berjalan tanpa ditampilkan di ALT + TAB. NAMUN, jika Anda membuka formulir, formulir itu masih akan mengikuti fungsionalitas standar.
Saya dapat menggali artikel blog saya tentang membuat aplikasi yang HANYA merupakan NotifyIcon secara default jika Anda mau.
sumber