අවධානය සොරකම් කිරීමෙන් යෙදුම් වලක්වා ගැනීම


193

යෙදුම් සක්‍රීය කවුළුවෙන් අවධානය සොරකම් කිරීම වැළැක්වීමට විසඳුම් තිබේද?

මම යෙදුමක් ආරම්භ කරන විට, විශේෂයෙන් යමක් කිරීමට මාරුවෙන විට සහ නව යෙදුමට වාක්‍ය භාගයක් ලැබීමට පටන් ගන්නා විට මෙය විශේෂයෙන් කරදරකාරී වේ.


9
මගේ නඩුවේ අයිවෝ වින්ඩෝස් 7 නමුත් සුපර් යූසර් සඳහා සියලු වින්ඩෝස් අනුවාදයන් අදාළ වනු ඇතැයි මම සිතමි
svandragt

3
උපපරිපාලක වරයා මෙම ප්‍රශ්නය ඒකාබද්ධ කළේය: superuser.com/questions/199821/… වත්මන් ප්‍රශ්නය සමඟ. මෙය වැරදියි, වත්මන් ප්‍රශ්නයට පිළිතුර වින්ඩෝස් 7 සඳහා අදාළ නොවේ, එබැවින් එය ඒකාබද්ධ නොකළ යුතුය. වින්ඩෝස් 7
ඇලෙක්ස් ඇන්ජලිකෝ

17
මෙය මා මෙතෙක් භාවිතා කර ඇති සෑම GUI එකක් සමඟම මගේ අංක එකේ සුරතල් සතුන්ගෙන් එකකි. ඔබ යතුරු ලියනය කරමින් බොරු කියනවා, සමහර නිදිබර සංවාද කොටුව නාභිගත කර ඔබේ යතුරු එබීමෙන් අඩක් වෙනත් තැනකට යයි. කවුළු පද්ධති ක්‍රියාත්මක කරන්නන් මෙය දශක ගණනාවකට පෙර හදුනා ගනු ඇතැයි ඔබ සිතනු ඇත. කවුළුවක ක්‍රියාකාරකමක් තිබේ නම්, නව කවුළුව නිරාවරණය වීම ප්‍රමාද කරන්න. උදා: දැනට අවධානය යොමු කර ඇති කවුළුවේ අවසාන බොත්තම ක්ලික් කිරීමෙන් හෝ යතුරු එබීමෙන් තත්පර තුනක් හෝ හතරක් වන තුරු GUI හි කිසිවක් උත්පතන නොකරන්න. දෝ!
Kaz

26
This is especially annoying when I'm starting an application, switch to do something else and the new application starts receiving half a sentence of text.සංවාදයක් මතු වූ විට එය ඊටත් වඩා කරදරකාරී වන අතර ඔබ එය නොදැනුවත්වම පණිවිඩය නොපෙන්වා එය ඔබ විසින් එබූ නිසා Spaceහෝ Enterවාක්‍යයක් ටයිප් කරන විට එය ප්‍රතික්ෂේප කරයි.
සයිනෙටෙක්

3
මෙය ඇත්ත වශයෙන්ම කරදරයට වඩා වැඩි ය, මම කියන්නේ එය ආරක්ෂක අවදානමක් බවයි. ඔබ මුරපදයක් ටයිප් කර ඔබගේ ආදානය උදුරා ගන්නා විට යෙදුමක් නැවැත්වීම නතර කිරීමට කිසිවක් නැත.
ක්‍රිස් පීකොක්

Answers:


53

වින්ඩෝස් අභ්‍යන්තරය පුළුල් ලෙස හැසිරවීමකින් තොරව මෙය කළ නොහැකි අතර ඔබ එය ඉක්මවා යා යුතුය.

මෙහෙයුම් පද්ධතිය ඔබට තවත් දෙයක් කිරීමට පෙර ඔබ එක් ක්‍රියාවක් කිරීම සැබවින්ම වැදගත් වන විට දෛනික පරිගණක භාවිතයේ අවස්ථා තිබේ. එය සිදු කිරීම සඳහා, එය සමහර කවුළු වෙත ඔබේ අවධානය අගුළු දැමිය යුතුය. වින්ඩෝස් හි, මෙම හැසිරීම පාලනය කිරීම බොහෝ දුරට ඔබ භාවිතා කරන තනි වැඩසටහන් වල සංවර්ධකයින්ට ඉතිරි වේ.

මෙම මාතෘකාව සම්බන්ධයෙන් සෑම සංවර්ධකයෙකුම නිවැරදි තීරණ ගන්නේ නැත.

මෙය ඉතා කලකිරවන සහ කරදරකාරී බව මම දනිමි, නමුත් ඔබට ඔබේ කේක් තබා එය අනුභව කළ නොහැක. ඔබගේ දෛනික ජීවිත කාලය පුරාවටම යම් යම් UI අංගයක් වෙත අවධානය යොමු කිරීම හෝ යෙදුම කෙරෙහි අවධානය යොමු වී ඇති ලෙස ඉල්ලා සිටීම සමඟ ඔබ හොඳින් සිටින අවස්ථා බොහෝමයක් ඇත. නමුත් බොහෝ යෙදුම් මේ වන විට පෙරමුණ ගෙන සිටින්නේ කවුරුන්ද යන්න තීරණය කිරීමේදී තරමක් සමාන වන අතර පද්ධතිය කිසි විටෙකත් පරිපූර්ණ විය නොහැක.

ටික කලකට පෙර මම මෙම ගැටළුව විසඳීම පිළිබඳව පුළුල් පර්යේෂණ සිදු කළෙමි (සහ අසාර්ථක විය). මගේ පර්යේෂණයේ ප්‍රති result ලය කරදරකාරී ව්‍යාපෘති පිටුවෙන් සොයාගත හැකිය .

ඇමතීමෙන් අවධානය නැවත නැවත ලබා ගැනීමට උත්සාහ කරන යෙදුමක් ද ව්‍යාපෘතියට ඇතුළත් වේ:

switch( message ) {
  case WM_TIMER:
    if( hWnd != NULL ) {
      // Start off easy
      // SetForegroundWindow will not move the window to the foreground,
      // but it will invoke FlashWindow internally and, thus, show the
      // taskbar.
      SetForegroundWindow( hWnd );

      // Our application is awesome! It must have your focus!
      SetActiveWindow( hWnd );

      // Flash that button!
      FlashWindow( hWnd, TRUE );
    }
    break;

මෙම ස්නිපටයෙන් අපට දැකිය හැකි පරිදි, මගේ පර්යේෂණය මා අකමැති පරිශීලක අතුරුමුහුණත් හැසිරීමේ වෙනත් අංශ කෙරෙහි ද අවධානය යොමු කරන ලදී.

මෙය විසඳීමට මා උත්සාහ කළ ආකාරය නම් සෑම නව ක්‍රියාවලියකටම ඩීඑල්එල් පටවා වෙනත් කවුළු සක්‍රිය වීමට හේතු වන ඒපීඅයි ඇමතුම් සම්බන්ධ කිරීමයි.
අන්තිම කොටස පහසුම එකයි, එහි ඇති අපූරු API කොකු පුස්තකාල වලට ස්තූතියි. මම ඉතා විශාල mhook පුස්තකාලය භාවිතා කළෙමි :

#include "stdafx.h"
#include "mhook-2.2/mhook-lib/mhook.h"

typedef NTSTATUS( WINAPI* PNT_QUERY_SYSTEM_INFORMATION ) ( 
  __in       SYSTEM_INFORMATION_CLASS SystemInformationClass,     
  __inout    PVOID SystemInformation, 
  __in       ULONG SystemInformationLength, 
  __out_opt  PULONG ReturnLength    
);

// Originals
PNT_QUERY_SYSTEM_INFORMATION OriginalFlashWindow   = 
  (PNT_QUERY_SYSTEM_INFORMATION)::GetProcAddress( 
  ::GetModuleHandle( L"user32" ), "FlashWindow" );

PNT_QUERY_SYSTEM_INFORMATION OriginalFlashWindowEx = 
  (PNT_QUERY_SYSTEM_INFORMATION)::GetProcAddress( 
  ::GetModuleHandle( L"user32" ), "FlashWindowEx" );

PNT_QUERY_SYSTEM_INFORMATION OriginalSetForegroundWindow = 
  (PNT_QUERY_SYSTEM_INFORMATION)::GetProcAddress( 
  ::GetModuleHandle( L"user32" ), "SetForegroundWindow" );

// Hooks
BOOL WINAPI
HookedFlashWindow(
  __in  HWND hWnd,
  __in  BOOL bInvert
  ) {
  return 0;
}

BOOL WINAPI 
HookedFlashWindowEx(
  __in  PFLASHWINFO pfwi
  ) {
  return 0;
}

BOOL WINAPI 
HookedSetForegroundWindow(
  __in  HWND hWnd
  ) {
  // Pretend window was brought to foreground
  return 1;
}


BOOL APIENTRY 
DllMain( 
  HMODULE hModule,
  DWORD   ul_reason_for_call,
  LPVOID  lpReserved
  ) {
  switch( ul_reason_for_call ) {
    case DLL_PROCESS_ATTACH:
      Mhook_SetHook( (PVOID*)&OriginalFlashWindow,         HookedFlashWindow );
      Mhook_SetHook( (PVOID*)&OriginalFlashWindowEx,       HookedFlashWindowEx );
      Mhook_SetHook( (PVOID*)&OriginalSetForegroundWindow, HookedSetForegroundWindow );
      break;

    case DLL_PROCESS_DETACH:
      Mhook_Unhook( (PVOID*)&OriginalFlashWindow );
      Mhook_Unhook( (PVOID*)&OriginalFlashWindowEx );
      Mhook_Unhook( (PVOID*)&OriginalSetForegroundWindow );
      break;
  }
  return TRUE;
}

එදා මගේ පරීක්ෂණ වලින්, මෙය විශිෂ්ටයි. සෑම නව ක්‍රියාවලියකටම ඩීඑල්එල් පැටවීමේ කොටස හැර. කෙනෙකුට සිතිය හැකි පරිදි, එය එතරම් සැහැල්ලුවට ගත යුතු දෙයක් නොවේ. මම එවකට AppInit_DLLs ප්‍රවේශය භාවිතා කළෙමි (එය ප්‍රමාණවත් නොවේ).

මූලික වශයෙන්, මෙය විශිෂ්ට ලෙස ක්රියා කරයි. නමුත් මගේ ඩීඑල්එල් නිසි ලෙස නව ක්‍රියාවලි වලට ඇතුල් කරන යමක් ලිවීමට මට කාලය සොයා ගැනීමට නොහැකි විය . මේ සඳහා ආයෝජනය කර ඇති කාලය බොහෝ සෙයින් අවධානය යොමු කරන්නේ සොරකම් කිරීම නිසා ඇති වන කරදරයයි.

ඩීඑල්එල් එන්නත් කිරීමේ ගැටලුවට අමතරව, ගූගල් කේතය ක්‍රියාත්මක කිරීමේදී මා ආවරණය නොකළ නාභිගත කිරීමේ ක්‍රමයක් ද තිබේ. සම සේවකයෙකු ඇත්ත වශයෙන්ම අමතර පර්යේෂණ කිහිපයක් කළ අතර එම ක්‍රමය ආවරණය කළේය. SO: /programming/7430864/windows-7-prevent-application-from-losing-focus හි ගැටළුව සාකච්ඡා කරන ලදී


ඔබේ මෙම විසඳුම ජාවා වෙත ගෙන යා හැකි යැයි ඔබ සිතනවාද? මම ප්‍රශ්න සොයමින් සිටියත් කිසිවක් සොයාගත නොහැකි විය. සමහර විට මට කොක්ක පුස්තකාලය ජාවා භාවිතයෙන් ආනයනය කළ jneහැකිද?
ටොමේ සැටෝ - මොනිකා

@ ටොම්සැටෝ: අදහසක් නැහැ. මම මෙම කේතය සක්‍රියව භාවිතා නොකරමි.
ඩර් හොච්ස්ටැප්ලර්

මම එය අවම වශයෙන් C ++ ලෙස සම්පාදනය කිරීමට උත්සාහ කරමි (ඉන්පසු ජාවා වෙතින් සම්පාදනය කරන ලද ඩීඑල්එල් එන්නත් කරන්න / ඉවත් කරන්න). නමුත් එයද එතරම් සාර්ථක නොවේ. අදහස් දැක්වීමේදී මෙහි සාකච්ඡා කිරීමට මට අවශ්‍ය නැත, නමුත් ඔබට එය වැඩ කිරීමට උපකාර කිරීමට මට හැකි නම්, මම ඉතා කරුණාවන්ත වන්නෙමි! මම චැට් රූම් එකක් නිර්මාණය කළෙමි, මට එය වැඩ කිරීමට ලැබුනේ නම් මම එය කරන්නේ කෙසේදැයි අදහස් දක්වන්නෙමි
මොනිකා නැවත

23

වින්ඩෝස් 7 හි, ForegroundLockTimeoutරෙජිස්ට්රි ඇතුළත් කිරීම තවදුරටත් පරීක්ෂා නොකෙරේ, ඔබට මෙය ක්‍රියාවලි මොනිටරය සමඟ සත්‍යාපනය කළ හැකිය. ඇත්ත වශයෙන්ම, වින්ඩෝස් 7 හි ඔවුන් ඔබට පෙරබිම් කවුළුව වෙනස් කිරීමට ඉඩ නොදේ. ගොස් එහි විස්තර ගැන කියවන්න , එය වින්ඩෝස් 2000 සිට පවා පවතී.

කෙසේ වෙතත්, ලියකියවිලි උරා ගන්නා අතර ඔවුන් එකිනෙකා පසුපස හඹා ගොස් ඒ වටා මාර්ග සොයා ගනී .

ඉතින්, දෝෂ සහිත යමක් සිදුවෙමින් පවතී SetForegroundWindow, හෝ ඒ හා සමාන API කාර්යයන් ...

මෙය නිසියාකාරව කළ හැකි එකම ක්‍රමය වන්නේ වරින් වර ඇමතුම් ලබා දෙන කුඩා යෙදුමක් LockSetForegroundWindowකිරීම, අපගේ දෝෂ සහිත API ක්‍රියාකාරිත්වයට ඕනෑම ඇමතුමක් පාහේ අක්‍රීය කිරීමයි.

එය ප්‍රමාණවත් නොවේ නම් (තවත් දෝෂ සහිත API ඇමතුමක්?) ඔබට තව දුරටත් ගොස් සිදුවන්නේ කුමක්දැයි බැලීමට API අධීක්ෂණයක් කළ හැකිය, ඉන්පසු ඔබට සෑම ක්‍රියාවලියකටම API ඇමතුම් සම්බන්ධ කර ගැනීමෙන් පසුව අවුල් වන ඕනෑම ඇමතුම් ඉවත් කළ හැකිය . පෙරබිම. කෙසේ වෙතත්, උත්ප‍්‍රාසාත්මක ලෙස, මෙය මයික්‍රොසොෆ්ට් විසින් අධෛර්යමත් කරනු ලැබේ ...


3
වින්ඩෝස් 7 හි යමෙකුට මෙය ප්‍රජනනය කළ හැකි භාවිතයක් තිබේද? මිනිසුන් ප්‍රතිවිරුද්ධ දේ අත්විඳින විට (නිදසුනක් ලෙස, බොහෝ විට වින්ඩෝස් මගේ වර්තමාන කවුළුව පිටුපස සැඟවිය යුතු යැයි මම සිතමි) සහ වින්ඩෝස් 7 හි මෙය සිදුවීම මා තවම දැක නැති නිසා, යෙදුමක් ලිවීම තරමක් කරදරකාරී වනු ඇත, නමුත් නොහැකි වීම එය පරීක්ෂා කරන්න. තවද, මයික්‍රොසොෆ්ට් පවසන පරිදි මෙය තවදුරටත් වින්ඩෝස් 7 සමඟ සිදු නොවිය යුතුය. හොඳම පුද්ගලයින් එය යතුරුපුවරුවේ අවධානය අහම්බෙන් පමණක් මාරු කළ හැකි බව සොයා ගත් විට, මෙම API ඇමතුම එය නිවැරදි කරනු ඇති නමුත් එය සත්‍ය වශයෙන්ම ක්‍රියාත්මක වේදැයි පරීක්ෂා කරන්නේ කෙසේදැයි මම නොදනිමි .. .
තමරා විජ්මන්

1
ස්ථාපකය (InnoSetup මත පදනම්ව) වෙනත් ක්‍රියාවලි සහ වෙනත් (සැඟවුණු) සැකසුම් දියත් කරයි, නමුත් ඒවා පදනම් වී ඇත්තේ කුමන සැකසුම් නිර්මාතෘදැයි මම නොදනිමි.
ඩැනියෙල් බෙක්

6
Om ටොම්විජ්මන්: විවෘත රෙජිඩිට්, සොයාගත නොහැකි අහඹු පෙළක් සොයන්න. වෙනත් යෙදුමකට ගොස් ටයිප් කිරීම ආරම්භ කරන්න. සෙවීම අවසන් වූ විට, රෙජිඩිට් විසින් අවධානය නාස්ති කරනු ඇත.
endolith

1
වින්ඩෝස් 8 ප්‍රතිස්ථාපන පෙරදසුන භාවිතා කරමින් ප්‍රතිනිෂ්පාදනය කළ නොහැක. ඔබ භාවිතා කරන්නේ කුමන මෙහෙයුම් පද්ධතියද? මගේ නඩුවේදී එය පතුලේ ඇති යෙදුම ඉස්මතු කර
පෙන්වන

22
ඔව්, Win7 Pro 64-bit. අවධානය යොමු සොරකම් කිරීම උච්ච ක්‍රියාදාමයන් සඳහා ඊටත් වඩා භයානක ය, මන්ද ඔවුන් ඔබේ එබීම <Enter> නොවිය යුතු විට ඒවා ග්‍රහණය කර ගන්නා අතර අහම්බෙන් ඔබේ පද්ධතිය සො ose නළන්නැයි ඔබ කියනු ඇත. අවධානය කිසි විටෙකත් සොරකම් කිරීමට කිසිවකට නොහැකි විය යුතුය.
endolith

18

TweakUI හි මෙය සිදු කරන විකල්පයක් ඇත . සැක සහිත මෘදුකාංග සංවර්ධකයින් ඔවුන්ගේ යෙදුම කෙරෙහි අවධානය යොමු කිරීමට බල කරන සාමාන්‍ය උපක්‍රම බොහොමයක් එය වළක්වයි.

එය අඛණ්ඩ ආයුධ යුද්ධයක් වුවද එය සෑම දෙයක් සඳහාම ක්‍රියාත්මක වේදැයි මම නොදනිමි.

යාවත්කාලීන කිරීම : වඳවීමේ තර්ජනයට ලක්වූ මාසාට අනුව , TweakUI වින්ඩෝස් 7 හි ක්‍රියා නොකරයි.


2
tweakui වින්ඩෝස් 7 සමඟ අනුකූලද?
ෆ්‍රෑන්ක්ස්ටර්

ran ෆ්‍රෑන්ක්ස්ටර්. කිසිම අදහසක් නැහැ, සමාවෙන්න, මම හිතන්නේ එය එසේ නොවිය හැකියි. එය බාගත කර එය උත්සාහ කරන්න. ඔබ එසේ කරන්නේ නම් නැවත වාර්තා කරන්න.
සයිමන් පී ස්ටීවන්ස්

5
TweakUI කට්ටල රෙජිස්ට්‍රි සැකසුම භාවිතා කිරීම පවා Win7 මත ක්‍රියා නොකරයි.
වඳවීමේ තර්ජනයට ලක්ව ඇති

Nd එන්ඩෙන්ජර්ඩ්මාසා එය කුමන රෙජිස්ට්‍රි යතුරද?
n611x007

2
රෙජිස්ට්‍රි යතුර වන්නේ HKEY_CURRENT_USER \ පාලක පැනලය \ ඩෙස්ක්ටොප් \ පෙරබිම් ලොක් ටයිමවුට් (මිලි තත්පර වලින්). ඔව්, එය තවදුරටත් වින්ඩෝස් 7 හි ක්‍රියා නොකරයි.
foo

15

“අවධානය සොරකම් කිරීමේ” ක්‍රම දෙකක් ඇති බැවින් යම් ව්‍යාකූලතාවයක් පැවතිය හැකි යැයි මම විශ්වාස කරමි: (1) පෙරමුනට එන කවුළුවක් සහ (2) යතුරු එබීමේ කවුළුව.

මෙහි සඳහන් ගැටළුව බොහෝ විට දෙවැන්න විය හැකිය, එහිදී කවුළුවක් අවධානය යොමු කරන්නේ පෙරමුනට ගෙන ඒමෙනි - පරිශීලකයාගේ ඉල්ලීම හෝ අවසරය නොමැතිව.

සාකච්ඡාව මෙහි එක්ස්පී සහ 7 අතර බෙදිය යුතුය.

වින්ඩෝස් එක්ස්පී

එක්ස්පී හි රෙජිස්ට්‍රි හැක් එකක් ඇති අතර එමඟින් එක්ස්පී වින්ඩෝස් 7 මෙන් ක්‍රියා කරන අතර යෙදුම් සොරකම් කිරීමෙන් වළක්වා ගත හැකිය:

  1. වෙත යාමට regedit භාවිතා කරන්න : HKEY_CURRENT_USER\Control Panel\Desktop.
  2. දෙවරක් ක්ලික් කර ForegroundLockTimeoutඑහි අගය ෂඩාස්රාකාරයෙන් සකසන්න 30d40.
  3. හරි ඔබන්න සහ regedit වෙතින් පිටවන්න.
  4. වෙනස්කම් බලාත්මක වීමට ඔබේ පරිගණකය නැවත ආරම්භ කරන්න.

වින්ඩෝස් 7

(පහත සාකච්ඡාව බොහෝ දුරට එක්ස්පී සඳහා ද අදාළ වේ.)

වින්ඩෝස් විසින් නාභිගත කිරීම සොරකම් කිරීමෙන් යෙදුම් සම්පූර්ණයෙන්ම අවහිර කර ක්‍රියාකාරීව සිටීමට ක්‍රමයක් නොමැති බව කරුණාකර තේරුම් ගන්න. නිදසුනක් ලෙස, ලිපිගොනු පිටපතක් අතරතුර ඔබේ ප්‍රති-වයිරසයට ඇති විය හැකි තර්ජනයක් අනාවරණය වී ඇත්නම් සහ ඔබ විසින් ගත යුතු ක්‍රියාමාර්ගය ඉල්ලා සිටින කවුළුවක් උත්පතන කිරීමට කැමති නම්, මෙම කවුළුව අවහිර කර ඇත්නම්, පිටපත කිසි විටෙකත් අවසන් නොවන්නේ මන්දැයි ඔබට කිසි විටෙකත් වැටහෙන්නේ නැත.

වින්ඩෝස් 7 හි වින්ඩෝස් හි හැසිරීමට වෙනස් කළ හැක්කේ එක් වෙනස් කිරීමක් පමණි, එනම් එම්එස්-වින්ඩෝස් නාභිගත-මූසික රෙජිස්ට්‍රි හැක් භාවිතා කිරීමයි , එහිදී නාභිගත කිරීම සහ / හෝ සක්‍රිය කිරීම කර්සරය යටතේ ඇති කවුළු වෙත සැමවිටම යයි. ඩෙස්ක්ටොප් එක පුරා යෙදුම් පැනවීම වළක්වා ගැනීම සඳහා ප්‍රමාදයක් එකතු කළ හැකිය.
මෙම ලිපිය බලන්න: වින්ඩෝස් 7 - මවුස් හෝවර් කවුළුව සක්‍රිය කරයි - සක්‍රීය කරන්න .

එසේ නොමැති නම්, යමෙකු වැරදිකරු වැඩසටහන හඳුනාගෙන උදාසීන කළ යුතුය: මෙය සැමවිටම අවධානය යොමු කරන එකම යෙදුම නම්, මෙම යෙදුම අවධානය යොමු කිරීමට ක්‍රමලේඛනය කර ඇති අතර මෙය වළක්වා ගැනීම පරිගණකයෙන් ආරම්භ කිරීම අක්‍රීය කිරීමෙන් හෝ කළ හැකිය. මෙම හැසිරීම වළක්වා ගැනීම සඳහා එම යෙදුම මඟින් සපයන ලද යම් සැකසුමක් භාවිතා කරන්න.

අවධානය සොරකම් කරන්නේ කවුරුන්ද යන්න හඳුනා ගන්නා VB කේතයේ ඇතුළත් VBS ස්ක්‍රිප්ට් ඔබට භාවිතා කළ හැකිය , කතුවරයා වැරදිකරු මුද්‍රණ මෘදුකාංගයක් සඳහා "කෝල් හෝම්" යාවත්කාලීන කරන්නෙකු ලෙස හඳුනා ගැනීමට භාවිතා කළේය.

අනෙක් සියල්ල අසමත් වූ විට මංමුලා සහගත පියවරක් වන අතර, ඔබ නරක ලෙස වැඩසටහන්ගත කර ඇති මෙම යෙදුම හඳුනාගෙන තිබේ නම්, එය අවම කර ගැනීම සහ එමඟින් ඉදිරියෙන් නොසිටින බලාපොරොත්තුවකි. අවම කිරීමේ වඩාත් ප්‍රබල ආකාරයක් වන්නේ හොඳම නිදහස් යෙදුම් අවම කිරීමෙහි ලැයිස්තුගත කර ඇති නිදහස් නිෂ්පාදන වලින් එකක් භාවිතා කිරීම තැටියට ය .

බලාපොරොත්තු සුන්වීමේ අනුපිළිවෙලෙහි අවසාන අදහස වන්නේ ඩෙස්ක්ටොප් හෝ ඩෙක්ස්පොට් වැනි නිෂ්පාදනයක් භාවිතා කරමින් ඔබේ ඩෙස්ක්ටොප් එක මුලුමනින්ම පාහේ බිඳ දැමීම සහ පෙරනිමියට වඩා වෙනත් ඩෙස්ක්ටොප් එකක ඔබේ වැඩ කටයුතු කිරීමයි.

[සංස්කරණය කරන්න]

මයික්‍රොසොෆ්ට් සංරක්ෂිත ගැලරිය විශ්‍රාම ගොස් ඇති බැවින්, ඉහත VB කේතය ප්‍රතිනිෂ්පාදනය කරයි:

Declare Auto Function GetForegroundWindow Lib "user32.dll" () As Integer
Declare Auto Function GetWindowThreadProcessId Lib "user32.dll" (ByVal hwnd As Integer, ByRef procid As Integer) As UInteger

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Me.RichTextBox1.AppendText("Starting up at " & Now & vbCrLf)
    End Sub

    Private Sub GoingAway(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Deactivate, Me.LostFocus

        Dim hwnd As Integer = GetForegroundWindow()
        ' Note that process_id will be used as a ByRef argument
        ' and will be changed by GetWindowThreadProcessId
        Dim process_id As Integer = 1
        GetWindowThreadProcessId(hwnd, process_id)

        If (process_id <> 1) Then
            Dim appExePath As String = Process.GetProcessById(process_id).MainModule.FileName() 
            Me.RichTextBox1.AppendText("Lost focus at " & Now & " due to " & appExePath & vbCrLf)
        Else
            Me.RichTextBox1.AppendText("Lost focus due to unknown cause.")
        End If

    End Sub

49
"මෙම කවුළුව අවහිර කර ඇත්නම්, පිටපත කිසි විටෙකත් අවසන් නොවන්නේ මන්දැයි ඔබට කිසි විටෙකත් වැටහෙන්නේ නැත" එය සත්‍ය නොවේ. නිවැරදි හැසිරීම නම්, පරිශීලකයාට දිලිසෙන කාර්ය තීරු නිරූපකයක් (හෝ බැලූන් උත්පතන හෝ ටෝස්ටර් දැනුම්දීමක් හෝ යමක්) දැනුම් දීමයි. පරිශීලකයාට යතුරු එබීම් වලට බාධා කරන කවුළුවක් සමඟ බාධා කිරීම යනු ඔවුන් ප්‍රති-වයිරස මෘදුකාංගයට අහඹු ලෙස එක් ක්‍රියාමාර්ගයක් හෝ වෙනත් ක්‍රියාවක් කිරීමට පවසන බවයි. නිසැකවම දේවල් කිරීමට හොඳ ක්‍රමයක් නොවේ.
endolith

1
"මෙම කවුළුව අවහිර කර ඇත්නම්, පිටපත කිසි විටෙකත් අවසන් නොවන්නේ මන්දැයි ඔබට කිසි විටෙකත් වැටහෙන්නේ නැත" එය සත්‍ය නොවේ. නිවැරදි හැසිරීම නම්, දිලිසෙන කාර්ය තීරු නිරූපකය සමඟ පරිශීලකයාට දැනුම් දීමයි ... ක්‍රියාත්මක වන වැඩසටහනක බොත්තමක් හෝ යමක් ක්ලික් කළ විට නව මොඩල් සංවාදයක් නිර්මාණය වීමට හේතු විය (උදා: විවෘත ගොනුව ), නමුත් පසුව සංවාදය නිර්මාණය කිරීමට පෙර මම වෙනත් වැඩසටහනකට මාරු වෙමි. එහි ප්‍රති As ලයක් ලෙස දෙබස සැඟවී ඇති අතර අනෙක් වැඩසටහනට මාරුවිය නොහැකි අතර සංවාදය බැහැර කළ නොහැක. එහි කාර්ය තීරු බොත්තම හෝ Alt-Tabක්‍රියා නොකරයි ; දෙබස් ඉදිරිපස දෙසට බල කිරීම පමණි.
සයිනෙටෙක්

1
Yn සයිනෙටෙක්: සමහර විට ඉදිරිපස නොවන සංවාදයට ඇති එකම විසඳුම වන්නේ කාර්යය විනාශ කිරීමයි. වින්ඩෝස් හි නාභිගත ඇල්ගොරිතම ඇත්තෙන්ම පිළිකුල් සහගතය.
harrymc

2
@harrymc, මට කිසි විටෙකත් එක් යෙදුමක් මරා දැමීමට අවශ්‍ය නැත. මම මගේ කවුළු-හැසිරවීමේ වැඩසටහන ක්‍රියාත්මක කරමි ( WinSpy ++ උපක්‍රමය ඉතා විශිෂ්ටයි) සහ කවුළුව ඉදිරියෙන් සඟවන්න, එවිට මට සිරවී ඇති දෙබස් බැහැර කර සැඟවුණු කවුළුව නැවත පෙන්විය හැකිය. එය පහසු නැත, නමුත් එය එක් ක්‍රියාවලියක් මරා දැමීමට වඩා හොඳය.
Synetech

1
@harrymc, ඇත්ත වශයෙන්ම නොවේ; යෙදුමක් killing ාතනය කිරීම සහ දේවල් නැතිවීම වැඩි වාෂ්පයක් ඇති කරයි, එය මෝඩල් සංවාදයක් නම් (එය මව් කවුළුව අගුළු දමා කාර්ය තීරු බොත්තමක් නොමැති නම්), එය Alt+Tabලැයිස්තුවේ නොපෙන්වන අතර , මගේ අත්දැකීම් අනුව, කවුළුවක් මොඩල් සංවාදයක් විවෘතව පවතී නම් (කිසි විටෙකත්?) මොඩල් සංවාදය සමඟ පෙන්වන්නේ නැත Alt+Tab, විශේෂයෙන් දෙබස් කිසි විටෙකත් අවධානය ලබා ගැනීමට වෙනසක් සිදු නොකළේ නම්. :-|
සයිනෙටෙක්

4

විසින් ජාතිය ඩර් Hochstapler පිළිතුර , මම 64 සහ 32-bit ක්රියාවලීන් සහ පැණි දෙකම වින්ඩෝස් 7 හෝ නව මත සොරකම් අවධානය යොමු සමඟ වැඩ කරන dll ඉන්ෙජක්ටරය, ලිවීමට තීරණය: https://blade.sk/stay-focused/

එය ක්‍රියා කරන ආකාරය නම්, එය අලුතින් සාදන ලද කවුළු (භාවිතා කරමින් SetWinEventHook) නැරඹීම සහ දැනටමත් නොමැති නම් ඩීඑල්එල් ඩර් හොච්ස්ටැප්ලර්ගේ කවුළුවේ ක්‍රියාවලියට එන්නත් කිරීමයි. එය ඩීඑල්එල් මුදා හරින අතර පිටවීමේදී මුල් ක්‍රියාකාරිත්වය යථා තත්වයට පත් කරයි.

මගේ පරීක්ෂණයෙන්, එය මෙතෙක් ඉතා හොඳින් ක්රියා කරයි. කෙසේ වෙතත්, ගැටළුව යෙදුම් ඇමතුම් වලට වඩා ගැඹුරට යන බව පෙනේ SetForegroundWindow. උදාහරණයක් ලෙස නව කවුළුවක් සාදන විට, එය ස්වයංක්‍රීයව පෙරබිමට ගෙන එනු ලබන අතර එය පරිශීලකයෙකු වෙනත් කවුළුවකට ටයිප් කිරීමට බාධා කරයි.

නාභිගත සොරකම් කිරීමේ වෙනත් ක්‍රම සමඟ කටයුතු කිරීම සඳහා, තවත් පරීක්ෂණ අවශ්‍ය වන අතර එය සිදුවන අවස්ථා පිළිබඳ ඕනෑම ප්‍රතිපෝෂණයක් මම අගය කරමි.

සංස්කරණය කරන්න: ප්‍රභව කේතය දැන් ලබා ගත හැකිය.


මම යෙදුම උත්සාහ කළා. එය පරිපාලක ලෙස ආරම්භ කළ යුතු බව පෙනේ, එසේ නොවුවහොත් එය බිඳ වැටෙනු ඇත. ViveProSettings.exe එය මටත් කඩා වැටීමට හේතු වූ නිසා මම එම ක්‍රියාවලිය මරා දැමුවෙමි. මම මේවා හරහා වැඩ කළ පසු එය සැබවින්ම ක්‍රියාත්මක වේ (එතැන් සිට නාභිගත සොරකම් දැක නැත!) මට එය වසා දැමීමෙන් ප්‍රති-පරීක්‍ෂා කළ නොහැකි වුවද එය පිටවීමේදී ද බිඳ වැටී ඇත :). මම පැමිණිලි කරන්නේ නැහැ, ඔබේ කාර්යයට ස්තූතියි! මම එය භාවිතයට ගත හැකි ආකාරය හදුනා ගැනීමට කැමතියි. මම ඔබට විස්තර සහිතව විද්‍යුත් තැපැල් කළෙමි.
පියෙඩොන්

2

Ghacks ට හැකි විසඳුමක් ඇත:

සමහර යෙදුම් සක්‍රීය කවුළුවේ අවධානය යොමු කිරීමෙන් දිනකට කිහිප වතාවක් සිදු වේ. මම ලිපිගොනු නිස්සාරණය කරන විට හෝ මාරුවීමක් අවසන් කළ විට මෙය හේතු ගණනාවක් නිසා සිදුවිය හැකිය. මෙය සිදු වන විට බොහෝ විට එය වැදගත් නොවන නමුත් සමහර විට මම ලිපියක් ලියන අතර එයින් අදහස් කරන්නේ මට නැවත වචන කිහිපයක් ටයිප් කළ යුතු බව පමණක් නොව, මට සාන්ද්‍රණය නැති වී ඇති අතර අවධානය නැවත ලබා ගැනීමට ක්ලික් කළ යුතු බවයි.

මෙම Pro නිරීක්ෂක එය වෙබ් අඩවිය සිදුවන්නේ මේ වැළැක්වීම සඳහා ආකාරය පිළිබඳ තොරතුරක් වේ. නාභිගත සොරකම් වැළැක්වීමේ පහසුම ක්‍රමය නම්, “යෙදුම් නාභිගත කිරීමෙන් වළක්වා ගන්න” යනුවෙන් හැඳින්වෙන පසුබිමක් ඇති Tweak UI භාවිතා කිරීමයි. මෙම විකල්පය පරික්ෂා කිරීමෙන් වෙනත් යෙදුම් හදිසියේම උත්පතන වීම වළක්වන අතර ඔබ දැනට වැඩ කරන කවුළුවේ අවධානය සොරකම් කරයි.

මෙය ක්‍රියාත්මක වන්නේ යෙදුම අවම කිරීමට පෙර පමණි. නාභිගත කිරීම වෙනුවට එය Tweak UI හි එකම මෙනුවේ අර්ථ දැක්විය හැකි වාර ගණනක් ෆ්ලෑෂ් කරයි . ඔබට Tweak UI භාවිතා කිරීමට අවශ්‍ය නැතිනම් ඔබට වින්ඩෝස් රෙජිස්ට්‍රියේ සැකසුම වෙනස් කළ හැකිය.

රෙජිස්ට්‍රි යතුර වෙත සංචාලනය කරන්න HKEY_CURRENT_USER> පාලක පැනලය> ඩෙස්ක්ටොප් එක සහ පෙරබිම් ලොක් ටයිමූට් අගය 30d40 (ෂඩාස්රාකාර) හෝ 200000 (දශම) ලෙස වෙනස් කරන්න. ForeGroundFlashCount යතුර මඟින් පරිශීලකයා දැනුවත් කිරීම සඳහා කවුළුවක ෆ්ලෑෂ් ප්‍රමාණය නිර්වචනය කරයි.


20
එක්ස්පී පසු කිසිදු මෙහෙයුම් පද්ධතියක මෙය ක්‍රියා නොකරයි. එම රෙජිස්ට්රි අගය දැනටමත් එයට සකසා ඇත (පෙරනිමියෙන්, මම විශ්වාස කරමි) එය කෙසේ හෝ ක්රියා නොකරයි.
වඳවීමේ තර්ජනයට ලක්ව ඇති

1
මම වින්ඩෝස් 7 (64-බිට්) හි සිටින බව තත්පරයට, අවධානය-සොරකම් කිරීම (VS 2012 අවසාන වශයෙන් ක්‍රියාකාරී වන විට, උදාහරණයක් ලෙස) සහ ඉහත රෙජිස්ට්‍රි යෝජනාව දැනටමත් ක්‍රියාත්මක වේ. මෙම පිළිතුරෙහි තාක්ෂණික තහවුරු කිරීම: superuser.com/a/403554/972
මයිකල් පලුකොනිස්

0

ඔබ ක්‍රමානුකූලව සක්‍රිය කිරීමෙන්, උපරිම කිරීමෙන් සහ වෙනත් ක්‍රියාවලියකින් එම ක්‍රියාවලියේ ප්‍රධාන කවුළුව නාභිගත කිරීමෙන් පසු කාර්ය සාධක තීරුව අළුතින් සක්‍රිය ඉලක්ක කවුළුවක් දැල්වීමෙන් වළක්වා ගන්නේ කෙසේදැයි මම සොයා ගතිමි. පළමුවෙන්ම, මෙම මෙහෙයුමට ඉඩ දෙන්නේද යන්න පිළිබඳව බොහෝ සීමාවන් තිබේ.

"පෙරබිම් කවුළුව සැකසිය හැක්කේ කුමන ක්‍රියාවලියටද යන්න පද්ධතිය විසින් සීමා කරනු ලැබේ. ක්‍රියාවලියකට පෙරබිම් කවුළුව සැකසිය හැක්කේ පහත සඳහන් කොන්දේසි වලින් එකක් සත්‍ය නම් පමණි:

  • ක්‍රියාවලිය පෙරබිම් ක්‍රියාවලියයි.
  • පෙරබිම් ක්‍රියාවලිය මඟින් ක්‍රියාවලිය ආරම්භ කරන ලදී.
  • ක්‍රියාවලියට අවසාන ආදාන අවස්ථාව ලැබුණි.
  • පෙරබිම් ක්‍රියාවලියක් නොමැත.
  • පෙරබිම් ක්‍රියාවලිය නිදොස්කරණය වෙමින් පවතී.
  • පෙරබිම අගුළු දමා නොමැත (LockSetForegroundWindow බලන්න).
  • පෙරබිම් අගුළු කල් ඉකුත්වීම කල් ඉකුත්වී ඇත (SystemParametersInfo හි SPI_GETFOREGROUNDLOCKTIMEOUT බලන්න).
  • මෙනු කිසිවක් සක්‍රිය නොවේ.

https://docs.microsoft.com/en-us/windows/desktop/api/winuser/nf-winuser-allowsetforegroundwindow

එබැවින් පාලන ක්‍රියාවලිය පෙරබිමෙහි තිබේ නම්, ඉලක්ක ක්‍රියාවලියේ ක්‍රියාවලි හැඳුනුම්පත සමඟ AllowSetForegroundWindow අමතා පෙරබිම සොරකම් කිරීමට වෙනත් ක්‍රියාවලියක් තාවකාලිකව සක්‍රීය කළ හැකිය . ඊට පසු, ඉලක්ක ක්‍රියාවලියට තමන්ගේම කවුළු හසුරුව භාවිතා කර SetForegroundWindow ඇමතිය හැකි අතර එය ක්‍රියාත්මක වනු ඇත.

නිසැකවම, මේ සඳහා ක්‍රියාවලි දෙක අතර යම් සම්බන්ධීකරණයක් අවශ්‍ය වේ, නමුත් එය ක්‍රියාත්මක වන අතර, ඔබ මෙය කරන්නේ එක්ස්ප්ලෝරර්-ක්ලික් දියත් කිරීම් පවතින යෙදුම් උදාහරණය වෙත හරවා යවන තනි-සිද්ධි යෙදුමක් ක්‍රියාත්මක කිරීම සඳහා නම්, ඔබ දැනටමත් කෙසේ හෝ දේවල් සම්බන්ධීකරණය කිරීම සඳහා (උදා) නම් කරන ලද නළයක් තිබිය යුතුය.

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.