PDA

View Full Version : سوال: تنظيم taskbar and startmenu peroperties در برنامه.



mahboube
یک شنبه 19 دی 1389, 13:34 عصر
سلام دوستان
كسي ميدونه از چه توابعي براي تنظيم كردن taskbar peroperties توي برنامه استفاده كرد؟يا key هاش تو رجيستري چيا هستند؟
مثلا با اجراي برنامه auto-hide taskbar برابر true يا false شه.
ممنون.

Hadirj
یک شنبه 19 دی 1389, 13:55 عصر
امیدوارم این کمک کنه کلیک کنید (http://www.freevbcode.com/ShowCode.asp?ID=5229)

ricky22
یک شنبه 19 دی 1389, 16:27 عصر
http://msdn.microsoft.com/en-us/library/bb762108%28VS.85%29.aspx

long handleW1;


// ERROR: Not supported in C#: DeclareDeclaration
// ERROR: Not supported in C#: DeclareDeclaration
const TOGGLE_HIDEWINDOW = 0x80;

const TOGGLE_UNHIDEWINDOW = 0x40;
public object HideTaskbar()
{
handleW1 = FindWindowA("Shell_traywnd", "");
SetWindowPos(handleW1, 0, 0, 0, 0, 0, TOGGLE_HIDEWINDOW);
}

public object UnhideTaskbar()
{
SetWindowPos(handleW1, 0, 0, 0, 0, 0, TOGGLE_UNHIDEWINDOW);}

mahboube
یک شنبه 19 دی 1389, 16:42 عصر
نه اين كلا تسكبار رو Hide‌ميكنه.من ميخوام تمام چيزايي كه ميشه توي taskbar and startmenu prpertis(وقتي رو تسكبار peroperties ميگيري) رو تنظيم كنم.ممنون.

mahboube
دوشنبه 20 دی 1389, 09:40 صبح
دوستان كسي تاحالا اينكارو انجام نداده؟
ميدونم بايد تويregistry مقاديري كه مربوط به تنظيمات taskbar هست رو عوض كنم.
ولي وقتي دستي تو رجيستري تنظيماتو انجام ميدم كه اعمال نميكنه!!(معمولا بايد restart كنيم).
راهي وجود داره يه سري تنظيمات رو توي رجيستري انجام بديم(دستي!)و بدون اينكه لازم باشه log off كنيم اعمال بشه؟؟

mahboube
دوشنبه 20 دی 1389, 12:11 عصر
ولي وقتي دستي تو رجيستري تنظيماتو انجام ميدم كه اعمال نميكنه!!(معمولا بايد restart كنيم).
راهي وجود داره يه سري تنظيمات رو توي رجيستري انجام بديم(دستي!)و بدون اينكه لازم باشه log off كنيم اعمال بشه؟؟
براي اين سوال راهش اينه:(از:http://www.pcreview.co.uk/forums/thread-321573.php)


use ctrl+alt+del to bring up the TaskManager.Highlight the explorer.exe
process and click end task (Don't close TaskManager yet!) .Now go to
file/new task and write "explorer" without the quotes and click ok.. Done!

درواقع بايد explorer.exe رو reset كرد.
فقط چطوري ميشه ازتوي برنامه يك proccess رو stop ,start كرد??

ali.rezaei7
دوشنبه 20 دی 1389, 12:21 عصر
فقط چطوري ميشه ازتوي برنامه يك proccess رو stop ,start كرد?? از بین بردن پروسه از طریق نام:


Process[] p = Process.GetProcessesByName("explorer");
p[0].Kill();
از بین بردن پروسه از طریق PID


Process p = Process.GetProcessById(ProcessID);
p.Kill();
ایجاد پروسه:


Process.Start("explorer.exe")

mahboube
دوشنبه 20 دی 1389, 14:16 عصر
من بااين دستوردارم تو رجيستري مينويسم ولي خطاي... Cannot write to the registry key. ميده:


RegistryKey key = Registry.CurrentUser.OpenSubKey("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\C urrentVersion\\Explorer\\Advanced");
//if(key!=null)
key.SetValue("TaskbarSizeMove", 0);

.چرا؟

ali.rezaei7
دوشنبه 20 دی 1389, 14:45 عصر
شما زمانی که از OpenSubKey استفاده می کنی، دراین صورت دسترسی به صورت Read-only هستش. فکر کنم اگه از دستور زیر استفاده کنی، مشکل برطرف بشه:


Registry.SetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\C urrentVersion\\Explorer\\Advanced", "TaskbarSizeMove", 0);

mahboube
دوشنبه 20 دی 1389, 14:52 عصر
ممنون.خيلي لطفيدي.دستورتون درسته.
اينم درسته:


Registry.SetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\C urrentVersion\\Explorer\\Advanced", "TaskbarSizeMove", 0);

mahboube
دوشنبه 20 دی 1389, 15:03 عصر
از بین بردن پروسه از طریق نام:


Process[] p = Process.GetProcessesByName("explorer");
p[0].Kill();
از بین بردن پروسه از طریق PID


Process p = Process.GetProcessById(ProcessID);
p.Kill();
ایجاد پروسه:


Process.Start("explorer.exe")

من وقتي دستي توي taskmanager پروسس explorer رو end ميكنم بايد دوباره خودم حتما درستش كنم.ولي وقتي توي برنامه kill ش مي كنم.چندثانيه بعد خودش اجرا ميشه و اگر من دوباره start ش كنم پنجره ي explorer رو باز ميكنه؟چرا؟
من اگر start ش نكنم ممكنه مشكلي پيش بياد؟؟

اين كد براي lock كردن taskbar(براي چندتا prperty ديگشم دارم مينويسم كه ميزارم همين جا).


Registry.SetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\C urrentVersion\\Explorer\\Advanced", "TaskbarSizeMove", 0);
Process[] p = Process.GetProcessesByName("explorer");
p[0].Kill();

ali.rezaei7
دوشنبه 20 دی 1389, 15:22 عصر
دلیلشو نمی دونم؟ ولی خب ویندوز بدون explorer.exe خاموش بشه بهتره.:لبخندساده: اما اگه می خوای، که explorer رو بصورت دایمی از بین ببری، ازا این دستور استفاده کن:

Process.Start("taskkill", "/F /IM explorer.exe");

taskkill یه command external هست که تحت کنسول command prompt اجرا می شه. وظیفه این دوستور kill کردن پروسه هاست.

در مورد سوال دومت، نه، نیازی نیست که دوباره اجراش کنی، خودش بعد از چند لحظه اجرا میشه. مشکلی هم پیش نمیاد.

mahboube
دوشنبه 20 دی 1389, 16:31 عصر
يه سوال ديگه.چطوري ميشه يه key كه مقدار Binary ميگيره رو تنظيم كرد


string ss=" 28,00,00,00,ff,ff,ff,ff,02,00,00,00,03,00,00,00,6b ,00,00,00,1e,\00,00,00,fe,ff,ff,ff,3c,02,00,00,22, 03,00,00,5a,02,00,00";
Registry.SetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\C urrentVersion\\Explorer\\StuckRects2", "Settings",؟؟,RegistryValueKind.Binary);

mahboube
دوشنبه 20 دی 1389, 16:33 عصر
دلیلشو نمی دونم؟ ولی خب ویندوز بدون explorer.exe خاموش بشه بهتره.:لبخندساده: اما اگه می خوای، که explorer رو بصورت دایمی از بین ببری، ازا این دستور استفاده کن:

نه برادر.اگه از بين ببرمش كه desktop ميپره!!
ولي برام جالبه كه چرا با kill دوباره ساخته ميشه ولي با دستي كه حذف ميكني نه!!!
يعني برنامه كاري ميكنه؟؟؟يا دستور kill‌كامل از بين نمي بره؟
در هر حال اميدوارم مشكلي پيش نياد.
مرسي

ali.rezaei7
دوشنبه 20 دی 1389, 16:53 عصر
يه سوال ديگه.چطوري ميشه يه key كه مقدار Binary ميگيره رو تنظيم كرد

اینجوری ذخیره کن:


Registry.SetValue("HKEY_CURRENT_USER\\Software\\Microsoft", "bin", new byte[] { 1, 2, 3,12 },RegistryValueKind.Binary);

mahboube
سه شنبه 21 دی 1389, 08:57 صبح
اینجوری ذخیره کن:


Registry.SetValue("HKEY_CURRENT_USER\\Software\\Microsoft", "bin", new byte[] { 1, 2, 3,12 },RegistryValueKind.Binary);


اين نميشه.من دقيقا ميخوام همون مقدارو بنويسم توش.


" 28,00,00,00,ff,ff,ff,ff,02,00,00,00,03,00,00,00,6b ,00,00,00,1e,\00,00,00,fe,ff,ff,ff,3c,02,00,00,22, 03,00,00,5a,02,00,00";

mahboube
سه شنبه 21 دی 1389, 09:47 صبح
براي autohide=true:


Registry.SetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\C urrentVersion\\Explorer\\StuckRects2", "Settings", newbyte[] { 40, 0, 0, 0, 255, 255, 255, 255, 3, 0, 0, 0, 3, 0, 0, 0, 107, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 224, 3, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0 }, RegistryValueKind.Binary);
Process[] p = Process.GetProcessesByName("explorer");
p[0].Kill();


براي autohide=false:



Registry.SetValue("HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\C urrentVersion\\Explorer\\StuckRects2", "Settings", newbyte[] { 40, 0, 0, 0, 255, 255, 255, 255, 3, 0, 0, 0, 3, 0, 0, 0, 107, 0, 0, 0, 30, 0, 0, 0, 0, 0, 0, 0, 224, 3, 0, 0, 0, 5, 0, 0, 0, 4, 0, 0 }, RegistryValueKind.Binary);
Process[] p = Process.GetProcessesByName("explorer");
p[0].Kill();


دوستان غير از اين شكلي كه من دارم taskbar رو تنظيم ميكنم،آيا راه ديگه اي هم داره؟؟

ali.rezaei7
سه شنبه 21 دی 1389, 09:48 صبح
اين نميشه.من دقيقا ميخوام همون مقدارو بنويسم توش.شما می خوای یه مقدار رشته ای رو تو یه Value ی که نوعش باینری هست انتقال بدی؟! خب معلوم نمی شه. یا باید یه تابع بنویسی که مقادیر رشته ای رو به باینری تبدیل کنه. یا اینکه از همون روشی که گفتم استفاده کن. اگه هم می خوای مقدار هگزا ذخیره کنی قسمت مقدارو اینجوری بنویس:


new byte[]{0xF,0xC,...}

mahboube
سه شنبه 21 دی 1389, 11:24 صبح
من براي بعضي پروپرتي ها كه لازم داشتم انجام دادم.براي خصوصيت هاي ديگه هم بايد به همين صورت عمل كرد.
اينم برنامش: