2010-02-16 30 views
9

Tôi đang làm việc trên một dự án có nghĩa vụ phải hoạt động trên cả Windows và Linux (với cổng Mac không chính thức) mô phỏng bảng điều khiển hệ thống màu thực.Bản sao chép/dán văn bản độc lập của hệ điều hành trong C

Vấn đề của tôi là gần đây đã xuất hiện yêu cầu hỗ trợ textfield (có, dựa trên bảng điều khiển) và sẽ rất tuyệt khi thêm khả năng sao chép văn bản vào clipboard và dán từ đó. Có một cách để đạt được điều này mà sẽ:

  • được thực hiện trong C (không phải C++),
  • làm việc trong cả Windows và trong Linux (macro tiền xử lý là một lựa chọn nếu không có mã nền tảng độc lập),
  • không yêu cầu thêm thư viện nào để liên kết tới?

Cảm ơn trước sự giúp đỡ của bạn.

Trả lời

5

Nếu bạn không sử dụng thư viện giao diện người dùng nền tảng chéo (như wx hoặc cái gì đó), thì có vẻ như bạn sẽ chỉ phải viết mã clipboard gốc cho mỗi nền tảng bạn muốn hỗ trợ.

Hãy nhớ rằng, trên máy Macintosh, bạn sao chép bằng Command-C, chứ không phải Ctrl + C :)

+0

Heh, cảm ơn vì mẹo về Macs :). Tôi đã không bao giờ thực sự sử dụng một (tốt, một lần, nhưng chỉ để chỉnh sửa video). Tôi hy vọng người duy trì cổng Mac sẽ có thể giải quyết vấn đề này: D. Oh, và trong Linux, bạn sao chép chỉ bằng cách làm nổi bật văn bản: D. – mingos

+0

@mingos Hãy nhớ rằng Linux có thể có nhiều clipboards. Có "clipboard văn bản" clipboard được cung cấp bởi máy chủ X, và sau đó môi trường máy tính để bàn (KDE, Gnome, vv) có thể cung cấp clipboard Ctrl + C của riêng nó mà có thể hoặc không thể chia sẻ nội dung với clipboard X. –

+0

Tôi tin rằng dựa vào clipboard X là cách tốt nhất để đi trong trường hợp của tôi, vì nó * nên * yêu cầu thực hiện duy nhất cho KDE, Gnome, XFCE và whatnot ... ít nhất tôi nghĩ vậy ... – mingos

4

Clipboard vốn dĩ là khái niệm do hệ điều hành xác định. Bản thân ngôn ngữ C không có kiến ​​thức về clipboard là gì hoặc cách vận hành nó. Bạn phải giao diện trực tiếp với hệ điều hành hoặc sử dụng thư viện di động thực hiện điều này nhân danh bạn. Không có cách nào xung quanh chuyện này.

+0

Vâng, tôi dường như đã vấp phải một số mã C có nghĩa vụ phải làm cho clipboard hoạt động trong Windows: http://www.daniweb.com/code/snippet217173.html --- nó không cần thêm thư viện và với một tiền xử lý #ifdef, tôi sẽ có thể biến nó thành một phần của Windows. Tôi không biết liệu đoạn mã này có hoạt động được không (tôi hy vọng vậy), tôi vẫn đang tìm kiếm thứ gì đó tương tự cho Linux ... – mingos

4

Cá nhân tôi sẽ xác định tôi chức năng của riêng bạn

getClipboardText(); 

Đó là quy định tại hai tập tin khác nhau tiêu đề (linux_clipboard.h, windows_clipboard.h, vv) và sau đó làm trước proccessor công cụ để tải một trong những phù hợp cho phù hợp. Tôi không thực sự mã trong C/C++ vì vậy tôi xin lỗi nếu điều đó đã không thực hiện bất kỳ ý nghĩa hoặc là thực hành xấu, nhưng đó là cách tôi muốn đi về việc này.

#if WIN32 
#include windows_clipboard.h 
#endif 

Đó là loại điều

Hãy nhớ rằng: Đối với Linux, bạn phải đối phó với quản lý cửa sổ khác nhau (Gnome, KDE) tất cả với nhiều cách khác nhau của quản lý clipboard. Hãy ghi nhớ điều này khi thiết kế ứng dụng của bạn.

+0

Đây chính là điều tôi đang nghĩ đến. Tôi chỉ muốn biết liệu có cách nào giải quyết vấn đề này trong C, và không có sự phụ thuộc. Tôi không muốn liên kết đến một thư viện bổ sung chỉ để hỗ trợ clipboard. Tôi nghĩ rằng nó có thể thực hiện được trong Windows, sau #including windows.h, nhưng tôi vẫn đang cố gắng tìm ra cách để làm điều đó trong Linux ... Dù sao, cảm ơn phản hồi của bạn. – mingos

1

Bạn có thể liên lạc với clipboard bằng cách sử dụng xclip. Bạn có thể sử dụng tập lệnh python này để thực hiện công việc này thông qua giao tiếp với 'dcop' và 'klipper' here. Đó là cho KDE, tôi không biết làm thế nào nó sẽ được thực hiện theo GNOME ... Bạn cũng có thể làm điều này một cách độc lập của một trong hai GNOME/KDE bằng cách sử dụng DBUS, mặc dù tôi không thể nói 100% tự tin về điều đó hoặc là ... Chỉ cần lưu ý rằng, đối với một công việc đa nền tảng thực sự, bạn phải xem xét các giao diện khác nhau như dưới Linux, X là giao diện trình quản lý cửa sổ chính và GNOME/KDE nằm trên đầu trang của nó. Tôi không chọn ra các GUI khác như FluxBox, WindowMaker để đặt tên nhưng một vài, và sẽ có rất nhiều mã phụ thuộc vào nền tảng, và cũng kết hợp, bạn cũng sẽ xử lý clipboard của Windows .. tất cả trong tất cả , một mã được tích hợp lớn ...

Bạn đã không cân nhắc xem API lập trình X thô để hỗ trợ khay nhớ tạm chưa?Có lẽ điều đó có thể tốt hơn như tôi tưởng tượng, GNOME/KDE vv đang sử dụng API của X để thực hiện công việc clipboard ... nếu điều đó được xác nhận, thì công việc sẽ bị cắt và độc lập với các giao diện GUI chính ... (Tôi hy vọng đó sẽ là trường hợp vì nó sẽ làm cho cuộc sống dễ dàng hơn cho dự án của bạn!)

Có thể sử dụng các công tắc biên dịch thời gian, cho mỗi nền tảng ... WIN, KDE, GNOME, MAC hoặc sử dụng được xác định trước ..

Hy vọng điều này sẽ giúp, Trân trọng, Tom.

+0

Hey, xclip có vẻ thú vị, tôi sẽ kiểm tra cách họ đã làm nó ở đó. Cám ơn vì sự gợi ý! – mingos

Các vấn đề liên quan