Jumat, 15 Desember 2017

Melacak penyebab tidak bisa Copy dan Paste

Apakah anda pernah berada dalam situasi dimana anda tidak dapat melakukan copy atau paste pada aplikasi yang sedang anda gunakan? Bila ya, maka artikel kali ini akan membahas teknik troubleshooting masalah copy/cut/paste.

Seperti teknik-teknik  troubleshooting pada umumnya, untuk mencari penyebab masalah tidak bisa copy/cut/paste kita harus menyingkirkan satu-persatu kemungkinan yang bisa menjadi penyebab.  Ada 2 kemungkinan penyebab anda tidak dapat melakukan copy atau paste: Pertama, karena tombol pada keyboard yang tidak berfungsi, dan kedua karena adanya konfilk dengan aplikasi lain.

Untuk memastikan apakah masalah ini disebabkan oleh tidak berfungsinya tombol-tombol pada keyboard ([Ctrl]+[C] untuk copy, [Ctrl]+[X] untuk cut, [Ctrl ]+[V] untuk paste) anda dapat mencoba alternatif lain untuk melakukan copy/cut/paste. Alternatif pertama adalah dengan melakukan copy/cut/paste melalui menu atau context menu dari aplikasi yang anda pakai dengan menggunakan mouse. Alternatif kedua adalah dengan menggunakan shortcut key alternatif untuk melakukan copy/paste. Tidak banyak orang yang tahu bahwa pada umumnya kita dapat melakukan aksi copy dengan menggunakan shortcut key [Ctrl]+[Insert], aksi cut dengan menggunakan shortcut key [Shift]+[Delete] dan aksi paste dengan menggunakan shortcut key [Shift]+[Insert].

Bila anda dapat melakukan copy/cut/paste dengan menggunakan cara di atas, maka penyebabnya adalah tombol keyboard yang tidak berfungsi. Namun bila tidak, maka penyebabnya adalah adanya aplikasi yang memonopoli clipboard.

Clipboard adalah sebuah fasilitas dari Windows yang berfungsi untuk menyimpan data sementara yang digunakan untuk transfer data antar aplikasi atau dokumen. Clipboard bersifat global dalam artian semua aplikasi dapat mengaksesnya, tapi hanya satu aplikasi yang dapat mengaksesnya dalam satu saat. Jika anda melakukan aksi copy, maka aplikasi yang anda gunakan akan mencoba untuk mengambil kendali clipboard sebelum mentransfer data yang hendak anda copy ke dalam clipboard. Setelah data ditransfer ke clipboard, aplikasi tersebut harus melepas kembali kendali clipboard agar aplikasi lain dapat mengaksesnya. Bila anda tidak dapat melakukan aksi copy/paste, ini disebabkan oleh adanya satu aplikasi yang tidak melepas kendali clipboard sehingga aplikasi yang anda gunakan tidak dapat mengaksesnya.

Satu cara yang dapat anda lakukan untuk mengobati masalah ini adalah dengan melakukan log-off dan log-on kembali, tapi cara ini sangat tidak efisien dan juga tidak dapat digunakan untuk mencari tahu aplikasi mana yang tidak melepas kendali clipboard.

Cara kedua yang anda dapat lakukan adalah dengan menjalankan script PowerShell di bawah ini. Script ini akan melacak proses yang mengunci clipboard, menampilkannya ke layar dan memberi anda opsi untuk menghentikan proses tersebut.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
Add-Type  @"
using System;
using System.Runtime.InteropServices;
        
public class W32Func {
    [DllImport("user32.dll", SetLastError = true)]
    public static extern IntPtr GetOpenClipboardWindow();

    [DllImport("user32.dll", SetLastError = true)]
    public static extern int GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);
}    
"@

[int]$processID = 0 
[W32Func]::GetWindowThreadProcessId([W32Func]::GetOpenClipboardWindow(), [ref]$processId) | Out-Null

if ($processID -ne 0) {
    $columns = @{Expression = {$_.ID}; Label = "PID"}, `
               @{Expression = {$_.Name}; Label = "Process Name"}, `
               @{Expression = {$_.MainWindowTitle}; Label = "Window Title"}
    Get-Process -Id $processID | Format-Table -AutoSize $columns

    Write-Host "Press [X] key to stop the process or [Esc] key to exit"

    $keyCodes = 27, 88
    do {
        $keyPress = $host.UI.RawUI.ReadKey("NoEcho, IncludeKeyDown")
    } while ($keyCodes -notcontains $keyPress.VirtualKeyCode)

    if ($keyPress.Character -eq "X") {
        Stop-Process -Id $processID
    }
}

Kopi dan simpan script di atas dalam file teks dan beri nama Free-Clipboard.ps1. Di bawah adalah contoh tampilan output dari script ini bila dijalankan.

PowerShell Console

Script ini akan menampilkan Process ID (PID), Process Name, dan Window Title dari proses yang tidak melepas kendali clipboard. Bila anda menekan tombol [X] maka proses itu akan dimatikan oleh script ini. Bila anda ingin mematikan proses itu sendiri (karena anda ingin menyimpan terlebih dahulu data yang sedang diolah aplikasi tersebut), tekan tombol [Esc].

Ada satu situasi dimana script ini tidak dapat melacak proses yang sedang memegang kendali clipboard yang disebabkan oleh adanya bug dalam proses tersebut, meskipun situasi ini jarang terjadi. Namun bila anda mengalami situasi ini, cara terakhir yang anda dapat lakukan adalah dengan mematikan satu-persatu aplikasi yang berjalan hingga anda dapat melakukan aksi copy/cut/paste kembali. Aplikasi yang anda matikan paling akhir itulah yang tidak melepas kendali clipboard.

Semoga bermanfaat.

Tidak ada komentar:

Posting Komentar